1

在尝试使用 Mongoose 构造一些静态变量时,我在调用 find() 或 findOne() 时似乎无法访问错误参数。这是我的静态:

User.statics.authenticate = function(login, password, cb){
    return this.model('User').findOne({
        username: login, 
        password: password
    }, function(err, user){
        console.log("error", err);
        console.log("user", user);
    }).exec(cb);
};

我试图用这样的东西来称呼它:

exports.session = function(req, res){
    return User.authenticate(req.body.login, req.body.password, function(err, doc){
        console.log('err', err);
        console.log('doc', doc);
    });
};

在任何情况下,无论 findOne 查询的结果如何,err 始终为空。知道这里发生了什么吗?也许我无法理解所有这些回调......

4

2 回答 2

7

Apparently an empty query result is not actually an error, so that's the reason 'err' remains null despite not finding a result. So, you need to test if 'user' is null or not, and then create your own error.

于 2012-07-05T04:09:53.017 回答
2

我不确定它是否完全解释了你所看到的,但如果你直接提供一个回调函数,findOne那么你就不会调用exec. 因此,您的身份验证函数应如下所示:

User.statics.authenticate = function(login, password, cb){
    this.model('User').findOne({
        username: login, 
        password: password
    }, function(err, user){
        console.log("error", err);
        console.log("user", user);
        cb(err, user);
    });
};
于 2012-07-04T01:55:53.443 回答