mongodb 为什么阵列post数据被推入错误的用户?

nmpmafwu  于 2022-12-11  发布在  Go
关注(0)|答案(2)|浏览(92)

I'm trying to solve this problem entire day.. I'm creating 'likes' system, but one part of my code not working correctly. What I'm trying to do is when user is logged he can see displayed user on main page. He can like or dislike him.
For example: Bob pressed like button on John profile, so Bob should get John (as an object) in his liked array. By the way all data are pushing to MongoDB . But the problem is that when Bob press like button, John has been pushed to John liked array, not in Bob. Next step when Bob already liked him, next user displayed for example Garry, so if he liked Garry too, so Garry is pushed to John liked array. Not in Bob or Garry. I've never had any problem like this.. I'll add my code below.
I hope anyone could help me with that.. Thank you!
back-end ( mainController ) :

updateLikes: async (req, res) => {
        const { secret } = req.params
        const likesObj = req.body
        const updateUser = await UserSchema.findOneAndUpdate(secret, { $push: { likes: likesObj } }, { returnDocument: 'after' })
        console.log(secret)
        await updateUser.save()
        return res.send({ error: false, message: 'Likes updated!', data: null })
    },
    updateLiked: async (req, res) => {
        const { secret } = req.params
        const likedObj = req.body
        const updateLiked = await UserSchema.findOneAndUpdate(secret, { $push: { liked: likedObj } }, { returnDocument: 'after' })
        console.log(secret)
        await updateLiked.save()
        return res.send({ error: false, message: 'Liked updated!', data: null })
    },

There's where I'm using post :

import React, { useState, useEffect } from 'react';
import { Link, useParams, useNavigate } from 'react-router-dom';
import Toolbar from '../components/Toolbar';
import { get, post } from '../helper/helper';

export default function TestPage() {

    const [current, setCurrent] = useState()
    const [index, setIndex] = useState(0);
    const [allUsers, getAllUsers] = useState([])
    const localSecret = window.localStorage.getItem('secret')
    const nav = useNavigate()
    const { user } = useParams()

    useEffect(() => {
        async function currentUser() {
            const resp = await get(`user/${localSecret}`)
            setCurrent(resp.data)
        }
        currentUser()
    }, [])

    useEffect(() => {
        async function fetchUsers() {
            const resp = await get('api')
            resp.filter(user => user.secret !== localSecret)
            getAllUsers(resp)
        }
        fetchUsers()
    }, [])

    const currentUser = allUsers[index];

    // Other user likes array
    async function postLikes() {
        await post(current, `likes/${user}`)
        console.log('current.data likes', current)
        console.log('user likes', user)
        console.log('likes post req', await post(current, `likes/${user}`))
    }
// Current user liked array
    async function postLiked() {
        await post(currentUser, `liked/${localSecret}`)
        console.log('currentUser liked', currentUser)
        console.log('localSecret', localSecret)
        console.log('post liked', await post(currentUser, `liked/${localSecret}`))
    }

    async function postDislike() {
        await post(currentUser, `dislike/${localSecret}`)
    }

    return (
        <div className='home__page'>
            <Toolbar />
            <div className="home__users">
                <div className='single__user'>
                    <img src={currentUser && currentUser.image[0]} alt="" />
                    <h3>{currentUser && `${currentUser.firstName} ${currentUser.lastName}`}</h3>
                    <h4>{currentUser && currentUser.gender}</h4>
                    <button onClick={() => { setIndex(index + 1); postDislike(); nav(`/${currentUser.secret}`) }}>Dislike</button>
                    <button onClick={() => { setIndex(index + 1); postLiked(); postLikes(); nav(`/${currentUser.secret}`) }}>Like</button>
                </div>
            </div>
            <footer className='footer'>
                <p>All rights reserved by Cartoon Match organization. To read more about our policy <Link to='/policy'>click here</Link>. </p>
            </footer>
        </div>
    )
}
4jb9z9bj

4jb9z9bj1#

考虑改进变量的名称。currentcurrentUseruser很难区分。您能向我解释一下这三个变量之间的区别吗?也许这样我们可以更好地帮助您。

bjp0bcyl

bjp0bcyl2#

The problem was, that I was using in mainController:

const updateUser = await UserSchema.findOneAndUpdate( secret , { $push: { likes: likesObj } }, { returnDocument: 'after' })

So I just added in findOneAndUpdate curly bracket on secret like this {secret} and this is where my whole problem was..

相关问题