【发布时间】:2020-07-04 11:33:00
【问题描述】:
我正在 Express JS 和 Mongo DB 中构建一个 REST API。我正在利用 Mongoose 包与数据库交互,并尝试实现一个强大的端点,以允许用户更新有关其帐户的详细信息,例如他们的姓名。
我的端点已设置,我可以发送请求,但是,它似乎只有在我不通过我要更新的用户的电子邮件和密码时才有效(请记住,我需要检查他们将其更改为的电子邮件尚不存在)
router.patch('/update', verify, async (req, res) => {
// validate incoming data
const { error } = registerValidation(req.body)
if (error) return res.status(400).send(error.details[0].message)
// check if user already exists
const emailExists = await User.findOne({ email: req.body.email })
if (emailExists) return res.status(400).send('Email already exists')
// hash password
const salt = await bcrypt.genSalt(10)
const hashPassword = await bcrypt.hash(req.body.password, salt)
// update user
const user = new User({
name: req.body.name,
email: req.body.email,
password: hashPassword
})
User.findOneAndUpdate({ _id: req.user.id }, user, { runValidators: true, useFindAndModify: false, new: true }, (error, result) => {
if (error) {
console.log('error')
return res.status(400).send(error)
}
res.status(200).send(result)
});
})
首先,我得到的是一个返回的1 而不是一个对象,但之前由于某种原因,我得到了一个带有66 代码的 Mongo DB 错误...
这是怎么回事?
更新
当我发送我的正文以更新用户时,我收到了以下回复:{"operationTime":"6845592053464694785","ok":0,"code":66,"codeName":"ImmutableField","$clusterTime":{"clusterTime":"6845592053464694785","signature":{"hash":"+uHFhNsV5B60qR/Yhd2qg8Cd6jA=","keyId":"6843771360993345539"}},"name":"MongoError"},尽管我只编辑了三个字段中的 名称
【问题讨论】:
标签: node.js mongodb express mongoose