【问题标题】:mongoose not supplying error in find function猫鼬在查找功能中没有提供错误
【发布时间】:2012-07-04 00:48:24
【问题描述】:

在尝试使用 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 始终为空。知道这里发生了什么吗?也许我无法理解所有这些回调......

【问题讨论】:

    标签: javascript node.js express mongoose


    【解决方案1】:

    显然,一个空的查询结果实际上并不是一个错误,所以这就是尽管没有找到结果,'err' 仍然为 null 的原因。因此,您需要测试“用户”是否为空,然后创建自己的错误。

    【讨论】:

    • 我简直不敢相信我刚刚花了两个小时。
    • @AdamWaite 我几乎就是这么做的。这太疯狂了。
    【解决方案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);
        });
    };
    

    【讨论】:

    • 这并没有解决我的问题(见下文),但无论如何它都是有用的建议。谢谢。
    猜你喜欢
    • 2018-08-04
    • 2015-07-06
    • 1970-01-01
    • 2018-04-08
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2021-04-07
    相关资源
    最近更新 更多