【问题标题】:Can i get model.save() to have a return value?我可以让 model.save() 有一个返回值吗?
【发布时间】:2017-05-21 12:51:34
【问题描述】:

我是 node 新手,我正在尝试通过 mongoose 将一些东西保存到 mongo。 如果 save 有错误,我想返回 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);

【问题讨论】:

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


    【解决方案1】:

    你不应该不要同步,否则你会阻塞你的整个Node线程。

    相反,您应该做的是返回一个承诺,或者一个带有回调的简单函数。 (比如mongoose saving one,注意mongoose 两者都支持)

    你可以return newUser.save()

    然后你会像addUser.then() 一样运行它。此外,您可以删除 module.exports = function() 并使用 callbackpromise 执行 module.exports 函数。

    【讨论】:

      【解决方案2】:

      NodeJs 是单线程进程,你不应该用同步调用阻塞它。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 2011-08-16
        • 1970-01-01
        相关资源
        最近更新 更多