gpt4 book ai didi

javascript - Express : No data received in final step 的链式 promise

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:59 25 4
gpt4 key购买 nike

我正在使用 Mongoose 的 findOneAndUpdate 方法来处理我的 Restful API 的放置请求。我将密码留给第二步,以使用 Mongoose 的“保存”预 Hook ,并在预 Hook 中对密码进行哈希处理。

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);
});
});

在上面的评论中,我在该 block 中有用户对象。但是在 postman 中,我“未收到数据”。有什么想法吗?

最佳答案

更好的是,使用 mongoose 预保存 Hook 。

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);
});
});

关于javascript - Express : No data received in final step 的链式 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com