为什么" findOne"总是告诉我,err = null?

时间:2014-07-22 00:44:23

标签: node.js mongodb mongoose async.js

我有一个简单的查询,总是为null提供err的值,我无法弄清楚原因。这是我的代码:

async.series([
    function(callback){
        User.findOne({ email :  req.body.email }, function(err, data) {
            console.log('email address' + req.body.email); // shows 'me@example.com'
            console.log('err = ' + err); // always shows 'null'
            success = err ? false : true; 
            // do stuff
        });
        callback();
    },
    function(callback){
        var updateData = {
            reset_key: random
        };
        User.update({ email: req.body.email}, updateData, function(err,data) {
            callback();
        });
    }
], function(err){
    if(!err) {
        res.json({ success: success });
    }
});

架构:

var userSchema = mongoose.Schema({
    firstname    : String,
    lastname     : String,
    email        : String,
    created : {
        type: Date,
        default: Date.now
    },
    reset_key : String 
});

只要输入数据库中已存在的电子邮件地址,async中的第二个函数调用就会一直成功。但是,async中的第一个函数调用总是告诉我errnull,无论我是否输入数据库中存在的电子邮件地址。为什么?我究竟做错了什么?

2 个答案:

答案 0 :(得分:1)

function中的每个series都需要传递最后err的任何function来接收它们:

function(callback){
    User.findOne({ email :  req.body.email }, function(err, data) {
        // ...

        callback(err);
    });
}
function(callback){
    // ...
    User.update({ email: req.body.email}, updateData, function(err,data) {
        callback(err);
    });
}

未向err提供callbackasync.series()并未发现任何err正在发生。

答案 1 :(得分:0)

使用findOne查找没有结果不是错误条件,因此不会设置错误。如果您尝试确定查询是否返回了结果,则不能将err用于此目的。

相反,你可以检查数据中是否有任何内容 - 如果findOne()没有返回任何结果,它将为空。