2014-10-12 92 views
0

我写一个简单的脚本来从表中检索密码和node.js中这里验证是脚本节点sqlite3的异步回调

module.exports = { 
    login: function (email, pass) { 
    var sqlite3 = require('sqlite3').verbose(); 
    var db = new sqlite3.Database('test.db'); 

    db.get("SELECT password FROM users WHERE user_email = ?", email, function(err, row) { 
     if (err !== null) { 
     console.log("An error has occured"); 
     return "error"; 
     } else if(row.password === pass) { 
     console.log("success"); 
     return "success"; 
     } else { 
     console.log("Incorrect password"); 
     return "failure"; 
     } 
    }); 
    } 
}; 

控制台日志语句时,如果其他情况下是正确的评估。但是返回值是未定义的。 我不明白为什么返回值是未定义的,如果记录正确完成。

+0

可能重复[为什么是我的变量不变后,我修改函数里面? - 异步代码引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – 2014-10-12 15:32:18

回答

1

您无法从回调中返回值,因为这样做毫无意义。你有一个回调传递给你的login()功能,并呼吁与(err, result)db.get()回调中:的

module.exports = { 
    login: function (email, pass, cb) { 
    var sqlite3 = require('sqlite3').verbose(); 
    var db = new sqlite3.Database('test.db'); 

    db.get("SELECT password FROM users WHERE user_email = ?", 
      email, 
      function(err, row) { 
     if (err) 
     return cb(err); 

     cb(null, row.password === pass); 
    }); 
    } 
};