javascript - Node-sqlite3异步回调

标签 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 情况时,控制台日志语句是正确的。但是返回值是未定义的。 我不明白如果日志记录正确完成,为什么返回值未定义。

最佳答案

您不能从回调中返回值,因为这样做毫无意义。您必须将回调传递给 login() 函数,并在 db.get() 内使用 (err, result) 调用该函数回调:

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

关于javascript - Node-sqlite3异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324837/

相关文章:

node.js - "snipe"显示最后删除消息的命令

sqlite - 如何在 flutter moor 中为双值创建列

javascript - 如何解析和求和逗号分隔的数字字符串

javascript - 为什么我的 Javascript 变量没有在此函数之外设置?

javascript - 皮诺 : default level undefined

javascript - 如何使用 MutationObserver 观察全身?

javascript - Node.js 使用哪种线程模型?

node.js - 带有nodejs异步请求的redis中的for循环

sql - 如何在 sqlite 中获得列大于零的所有结果?

Android SQLite,如何从列中获取值?