mongoose 错误:“无法读取null的属性(阅读'name')”当我尝试在mongoDB中更新用户时

wkftcu5l  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(119)

我在尝试更新用户数据时遇到问题。控制台中显示“TypeError:无法读取null的属性(阅读'name')”,我不知道如何解决这个问题。我还使用Postman来帮助创建路由和http动词
//----编辑用户函数-----//

static async editUser(req, res) {

        const id = req.params.id

        // Check if User Exists - Sucesso
        const token = getToken(req)
        // ! Erro a partir do AWAIT de getUserByToken
        const user = await getUserByToken(token)

        const { name, email, address, password, confirmPassword } = req.body

        let image = ""

        // Validations

        if (!name) {

            res.status(422).json({ message: "O campo de nome não foi preenchido" })
            return

        }

        console.log(name)
        console.log(user.name)

        user.name = name

        console.log(name)
        console.log(user.name)

        if (!email) {

            res.status(422).json({ message: "O campo de email não foi preenchido" })
            return

        }

        // Check if email has already taken - sucesso
        const userExists = await User.findOne({ email: email })

        if (user.email !== email && userExists) {

            res.status(422).json({ message: "Email já cadastrado, por favor utilize outro email" })
            return

        }

        console.log(email)
        console.log(user.email)

        user.email = email

        console.log(email)
        console.log(user.email)

        if (!address) {

            res.status(422).json({ message: "O campo de endereço não foi preenchido" })
            return

        }

        user.address = address

        if (password != confirmPassword) {

            res.status(422).json({ message: "As senhas não conferem" })
            return

        } else if (password === confirmPassword && password != null) {

            // Create a new password
            const salt = await bcrypt.genSalt(12)
            const passwordHash = await bcrypt.hash(password, salt)

            user.password = passwordHash

        }

        try {

            // returns updated data
            await User.updateOne(

                { _id: user._id },
                { $set: user },
                { new: true },
            )

            res.json({
                message: 'Usuário atualizado com sucesso!'
            })

        } catch (error) {

            res.status(500).json({ message: error })

        }

//-----主控台错误-----//

[nodemon] restarting due to changes...
[nodemon] starting `node ./index.js localhost:5000`
Conectamos ao Mongoose
[nodemon] restarting due to changes...
[nodemon] starting `node ./index.js localhost:5000`
Conectamos ao Mongoose
João Victor
C:\Users\João Vitor\Documents\vs_code\projeto_restaurante\backend\Controllers\UserController.js:204        console.log(user.name)
                         ^

TypeError: Cannot read properties of null (reading 'name')
    at editUser (C:\Users\João Vitor\Documents\vs_code\projeto_restaurante\backend\Controllers\UserController.js:204:26)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Node.js v18.2.0
[nodemon] app crashed - waiting for file changes before starting...

我尝试更新用户,并希望在mongoDB中看到新值,但代码不工作,无法更新用户

wfsdck30

wfsdck301#

因为用户对象为空。请添加一个可选运算符或使用useEffect挂钩检查值

console.log(user?.name)

首选方式

useEffect(() => {
  if(user){
      console.log(user.name)

  }
}, [user])

相关问题