快递链接承诺:在最后一步没有收到数据

我正在使用Mongoose的findOneAndUpdate方法来处理我的restful API的放置请求。 我把密码保存到第二步,使用“保存”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); }); }); 

在上面的注释中,我有该块中的用户对象。 然而在邮差,我有“没有数据收到”。 有什么想法吗?

更好的是,使用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(); }); 

这将允许你保存用户,如果密码没有被修改将不会更新它。

 router.put('/:id', function (req, res, next) { User.findById(req.params.id).exec(function (err, user) { user.set(req.body); user.save(function (err) { if (err) { return next(err); } return res.json(user); }); });