Node-sqlite3异步回调

时间:2014-10-12 11:54:10

标签: javascript node.js sqlite

我正在编写一个简单的脚本来从表中检索密码并在node.js中验证这是脚本

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";
      }
    });
  }
};

在评估if else案例时,控制台日志语句是正确的。但是返回值未定义。 我不明白为什么如果正确完成日志记录,返回值是未定义的。

1 个答案:

答案 0 :(得分: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);
    });
  } 
};