设置函数回调fram async request

时间:2017-08-18 08:52:30

标签: node.js

早安全,

我一直在寻找答案,但是我的noob大脑根本无法理解它。

我在models / user.js中有这个功能

module.exports.getUserByUsername = function(username, callback){
  var retUser = new User;
  sql.connect(dbConfig, function(err) {
    if (err) {
      console.log(err);
      callback();
    }

    // create Request object
    var request = new sql.Request();
    request.input('ip_username', sql.NVarChar, username)

    // query to the database and get the records
    request.query('select * from [portal_users] where username = @ip_username', function(err, recordset) {
      if (err) {
        console.log(err);
        return;
      } else {

        var user = new User(recordset.recordset[0].username,recordset.recordset[0].password,recordset.recordset[0].email,recordset.recordset[0].name);
        user.addID(recordset.recordset[0].id);
        retUser = user;

      }
      callback();


      // send records as a response
      //res.send(recordset);

    });
    });

    function callback() {
     sql.close();
      return retUser;
    };
    }

和我的routes / user.js中的代码

passport.use(new LocalStrategy(
function(username, password, done) {
 User.getUserByUsername(username, function(err, user){

if(err) throw err;
if(!user){
    return done(null, false, {message: 'Unknown User'});
}

User.comparePassword(password, user.password, function(err, isMatch){
    if(err) throw err;
    if(isMatch){
        return done(null, user);
    } else {
        return done(null, false, {message: 'Invalid password'});
    }
});
});
}));

我一直在修改使用mongoDB进行数据库连接的GITHUB示例,但我想使用MS SQL。该函数成功调用数据库并返回正确的值。但是我不知道如何启动回调,所以我可以将retUser对象传递回原始函数进行处理和登录。

我做了一会儿尝试通过不使用回调和使用标准返回类型的函数来做到这一点,但我很快意识到,鉴于异步性质,这将无法工作。

任何帮助都将非常感谢。

由于

1 个答案:

答案 0 :(得分:0)

好的,我设法用这篇文章搞清楚了: Node.js npm mssql function returning undefined

我的新代码是:

module.exports.getUserByUsername = function(username, callback){


  var connection =  new sql.ConnectionPool(dbConfig, function(err) {
    if (err) {
      console.log(err);
      callback(err);
      return
    }

    // create Request object
    var request = new sql.Request(connection);
    request.input('ip_username', sql.NVarChar, username)

    // query to the database and get the records
    request.query('select * from [portal_users] where username = @ip_username', function(err, recordset) {
      if (err) {
        console.log(err);
        callback(err,recordset);
        return;
      } else {

        var user = new User(recordset.recordset[0].username,recordset.recordset[0].password.replace(/ /g,''),recordset.recordset[0].email,recordset.recordset[0].name);
        user.addID(recordset.recordset[0].id);
        callback(err,user);
      }
      sql.close();

      // send records as a response
      //res.send(recordset);

    });
});
}