我可以让model.save()获得返回值吗?

时间:2017-01-06 17:34:56

标签: node.js express mongoose nodes mongoose-schema

我是节点的新手,我正试图通过mongoose将某些东西保存到mongo。 如果保存有错误,我想返回false(例如,有一个用户具有当前名称)。 问题是console.logs 1:2:6:7:3:4:5的顺序 有没有办法可以同步调用adduser?

module.exports.addUser = function(username,password){
console.log(1);
var newUser = User({
    username:username,
    password:password
});
console.log(2);
 newUser.save(function(err,prod,numeffect){
    if (err){

        console.log(err);
    }
    if (numeffect === 1){
        console.log(3);
         console.log("num effect = "+numeffect);

    }
    console.log(4);
    console.log(prod);

}).then(function(doc){console.log(5)});
console.log(6);
}

mongoose.addUser(req.body.username,req.body.password);
    console.log(7);

2 个答案:

答案 0 :(得分:1)

您应该 同步,否则您将阻止整个Node线程。

相反,你应该做的是返回一个promise或一个带回调的简单函数。 (如mongoose saving one,注意猫鼬支持两者)

您可以执行return newUser.save()

然后你就像addUser.then()一样运行它。此外,您可以使用module.exports = function()module.exports删除callback并执行promise您的功能。

答案 1 :(得分:0)

NodeJs是单线程进程,您不应该使用同步调用来阻止它。

当您收到来自mongodb的回复时,您应该传递一个回调函数来执行任何操作。

当进入NodeJ时,这是从调用和阻止到回调的重大转变。