【问题标题】:How to handle the asynchronous nature of NeDB find method? [duplicate]如何处理 NeDB find 方法的异步特性? [复制]
【发布时间】:2016-08-14 19:58:00
【问题描述】:

我的 Express 应用程序使用此控制器方法调用模型函数 verify,该函数使用 NeDB 的 find 方法在文档数据库文件中查找。这是验证方法..

verify : function(username, password) {
    db.find({ email: username }, function (err, docs) {
        return passwordHash.verify(password, docs[0].password);
    });
},

这是调用该函数的代码。

post_admin : function(req, res) {
if (!req.body.email || !req.body.password) {
    res.render('login', { title: 'Please provide your login details' });
  }else if(''!=req.body.email && ''!=req.body.password){
    var i = User.verify(req.body.email, req.body.password);
    if(i){
        res.render('admin/dashboard', { title: 'Successfully Logged In' });
    }else{
        res.render('login', { title: 'Not correct details!' });
    }
  }else{
    res.render('login', { title: 'Not correct details!' });
  }
},

...但即使它与文件中找到的数据匹配,它也会返回 false,并且应该返回 true。当我在 db.find 方法中进行控制台时,它显示为 true,但 verify 方法返回 false。结果,条件块总是执行 else 部分。当我同时控制台时,我看到条件在 db.find 记录任何内容之前执行。这是由于编程的异步性质造成的吗?我应该如何处理这个问题,因为我需要确定应该在控制器中呈现哪个视图!有没有办法在不破坏 Javascript 的异步特性的情况下做到这一点?我错过了什么明显的东西吗?

【问题讨论】:

    标签: javascript node.js express model-view-controller


    【解决方案1】:

    verify是异步函数,所以我加了callback

    verify : function(username, password, callback) {
        db.find({ email: username }, function (err, docs) {
            callback(passwordHash.verify(password, docs[0].password));
        });
    }
    ...
    post_admin : function(req, res) {
        if (!req.body.email || !req.body.password) 
            return res.render('login', { title: 'Please provide your login and password details' });
    
        User.verify(req.body.email, req.body.password, function(isOk) {
            return (isOk) ?
                    res.render('admin/dashboard', { title: 'Successfully Logged In' }) :
                    res.render('login', { title: 'Not correct details!' });
        });
    },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-28
      • 2016-01-06
      • 2016-07-20
      • 1970-01-01
      • 2014-04-02
      • 2013-08-05
      • 1970-01-01
      相关资源
      最近更新 更多