我正在使用Mongoose的findOneAndUpdate方法来处理我的restful API的put请求。我将密码保留到第二步,使用Mongoose的“保存”预挂钩,我在预挂钩中对密码进行哈希处理。
router.put("/:id", function(req, res, next){
var password = req.body["password"];
delete req.body["password"];
var p = new Promise(function (resolve, reject){
User.findOneAndUpdate({_id:req.params.id}, req.body, { 'new': true } ,function (err, user) {
if (err) {
reject(err);
}
else {
resolve(user);
}
});
});
p.then(function(user){
if(!password) {
return user;
}
user.password = password;
user.save(function(err) {
if (err) {
return(err);
}
else {
console.log(user); // The object is updated and here, but in postman I have "No Data Received"
return(user);
}
});
}).then(function(result){
return res.json(result);
}).catch(function(err){
next(err);
});
});
在上面的评论中,我在该块中有用户对象。然而在Postman中,我有“没有收到数据”。有什么想法吗?
答案 0 :(得分:1)
更好的是,使用$_SESSION['studentcourseinfo'] = $row;
预保存挂钩。
mongoose
允许您保存用户,如果未修改密码,则不会更新。
UserSchema.pre('save', true, function beforeSave (next, done) {
let user = this;
if (this.isModified('password')) {
bcrypt.genSalt(10, function genSalt (err, salt) {
if (err) {
return done(err);
}
bcrypt.hash(user.password, salt, function hash (err, hash) {
if (err) {
return done(err);
}
user.password = hash;
done();
});
});
} else {
done();
}
next();
});