我正在Express JS和Mongo DB中构建一个REST API。 我正在使用Mongoose包与数据库进行接口,并且正在尝试实现一个健壮的endpoint,以允许用户更新有关其帐户的详细信息,例如,他们的名字。
我的endpoint已经设置好了,我可以发送一个请求,但是,只有当我没有通过我想要更新的用户的电子邮件和密码(记住,我需要检查他们要将其更改为的电子邮件是否已经存在)时,它才可能起作用
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
而不是对象,但是早些时候,由于某种原因,我得到了一个Mongo DB错误,代码为66
。。。
这是怎么回事?
更新
当发送我的正文以更新用户时,我得到的响应为:{“operationtime”:“6845592053464694785”,“ok”:0,“code”:66,“codename”:“immutablefield”,“$clustertime”:{“clustertime”:“6845592053464694785”,“signature”:{“hash”:“+uhfhnsv5b60qr/yhd2qg8cd6ja=”,“keyid”:“6843771360993345539”}},“name”:“mongoerror”}
,尽管我
首先,您应该获得一个字段来进行查询。 您应该知道_id,或者您应该知道以前的电子邮件或任何唯一的字段值。
您通过以下代码创建了一个新用户。 但是这个创建的用户也将有一个唯一的ID。
null
const user = new User({
name: req.body.name,
email: req.body.email,
password: hashPassword
})