仅供参考,在node.js上使用Mongodb,Express和Mongoose。
我使用.save()
保存文档(包含数据的用户),然后我想通过.send()
通过请求返回此用户。
但是我当然不想返回密码,因此我访问以前保存的文档并删除密码:
user.status = /* Create new status and assign */;
user.save();
user.password = undefined;
应该注意的是,这是在几个回调中(伪代码):
Users.findOne (
// Do stuff
user.token = /* New token */;
user.save();
Shops.findOne( /* search by userId */
// Do stuff
user._shopId = shopId;
user.status = "active";
user.save();
// Hide password
user.password = undefined;
// Send
res.send({success: true, user: user});
)
)
我希望此用户的数据库文档保持不变,因为我在编辑后没有保存它。是的,如果我不是.save()
,我可以随意更改它(例如使用更新来更新它及其回调.send()
)。
但是,文档的密码会被删除。 .save()
是否异步,或者只是在线程的生命结束时运行,即使我把它放在代码的中间?
感谢。
答案 0 :(得分:1)
致user.save();
给予回电。像这样:
Users.findOne (
// Do stuff
user.token = /* New token */;
user.save();
Shops.findOne( /* search by userId */
// Do stuff
user._shopId = shopId;
user.status = "active";
user.save(function(err, user){
if(err) console.log(err);
if(user){
// Hide password
user.password = undefined;
res.send({success: true, user: user});
}
});
));
回调中的所有内容都是同步的。因此,只有在保存用户时才会发送响应。
应注意.save()
使用对象的指针进行保存,并且不会通过参数静态发送对象,因此在.save()
完成之前更改此对象意味着它会在保存在数据库中之前被更改。