简体   繁体   English

Node-sqlite3异步回调

[英]Node-sqlite3 asynchronous callback

I am writing a simple script to retrieve a password from the table and validate in node.js Here is the script 我正在编写一个简单的脚本以从表中检索密码并在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";
      }
    });
  }
};

The console log statements are correct when the if else cases are evaluated. 如果评估if else情况,则控制台日志语句正确。 However the return value is undefined. 但是,返回值是不确定的。 I do not understand why the return value is undefined if the logging is done correctly. 我不明白,如果正确完成日志记录,为什么未定义返回值。

You can't return values from a callback because doing so is meaningless. 您不能从回调返回值,因为这样做是没有意义的。 You have to pass in a callback to your login() function and call that with (err, result) inside your db.get() callback: 您必须将回调传递给login()函数,并在db.get()回调内部使用(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);
    });
  } 
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM