从findByID返回保存值的MongoDB问题
我有一个更新密码的功能问题。我想要的是一个功能,将更新记录的用户数据从findByID返回保存值的MongoDB问题,mongodb,Mongodb,我有一个更新密码的功能问题。我想要的是一个功能,将更新记录的用户数据 export const updateMe = async (req, res, next) => { if (!req) { res.status(400).end() } try { const updatedDoc = await User.findById(req.user._id, function(err, doc) { if (err) return next(er
export const updateMe = async (req, res, next) => {
if (!req) {
res.status(400).end()
}
try {
const updatedDoc = await User.findById(req.user._id, function(err, doc) {
if (err) return next(err)
doc.password = req.body.password
doc.save()
})
.lean()
.exec()
res.status(200).json({ data: updatedDoc })
} catch (e) {
console.log(e)
res.status(400).end()
}
}
我已经编写了中间件,它将在保存密码之前对密码进行散列
userSchema.pre('save', function(next) {
if (!this.isModified('password')) {
return next()
}
bcrypt.hash(this.password, 8, (err, hash) => {
if (err) {
return next(err)
}
this.password = hash
next()
})
})
我不知道为什么总是接收到错误消息“doc.save()不是函数”您正在混合承诺和等待代码,而且doc.save()返回一个承诺,所以您需要等待它 (我假设您已经在中间件中设置了req.user.\u id,并且它不是空的。) 因此,如果使用async/await,您的方法必须如下所示:
export const updateMe = async (req, res, next) => {
if (!req.body.password) {
return res.status(400).send("Password is required");
}
try {
let updatedDoc = await User.findById(req.user._id);
updatedDoc.password = req.body.password;
updatedDoc = await updatedDoc.save();
res.status(200).json({ data: updatedDoc });
} catch (e) {
console.log(e);
res.status(400);
}
};