Javascript 变量未被nodejs覆盖

Javascript 变量未被nodejs覆盖,javascript,node.js,Javascript,Node.js,console.log: module.exports={ login : function(id,pass){ var q = "SELECT * FROM user where id = ? and pass = ?"; var ret = 'default'; DB.DB.query(q, [id,pass], function (error,result) { if(error){

console.log:

module.exports={


   login : function(id,pass){
        var q = "SELECT * FROM user where id = ? and pass = ?";
        var ret = 'default';

        DB.DB.query(q, [id,pass], function (error,result) {
            if(error){
                console.log('not found');
                ret = 'unrecognized';
            } else{
                console.log('found');
                ret =  'validated';
            }
        });

        return ret;
    }};
正如您所看到的,从以下代码返回的值ret没有被更改,尽管它正确地遵循了函数的过程。。 我不熟悉node js和js之类的东西,所以任何评论和建议都肯定会有帮助(thx:)

DB.query()
是异步的,所以
登录
函数在返回
ret
之前不必等待代码的执行。您需要向登录方法添加回调(或使用承诺)

工作代码:

    GET /login 304 4.028 ms - -
default
POST /loginv 200 40.558 ms - 12
found
found
另一个文件:

module.exports = {
  login : function(id,pass,cb){
      var q = "SELECT * FROM user where id = ? and pass = ?";

      DB.DB.query(q, [id,pass], function (error,result) {
          if(error){
              console.log('not found');
              cb(error, 'unrecognized');
          } else{
              console.log('found');
              cb(null, 'validated');
          }
      });
  }
};
我建议你阅读发布的链接,这些链接可以让你对回电和承诺有一个概念


PS:我不知道您正在使用哪个库进行DB,但是如果库不为您进行查询,您必须在执行查询之前对输入进行清理。

DB.query()
是异步的,因此
login
函数在返回
ret
之前不要等待代码的执行。您需要向login方法添加回调(或使用承诺),换句话说,登录函数在查询完成执行之前返回。查询数据库是一个I/O操作,它是异步的,或者说是非阻塞的。它可以工作!!谢谢你的帮助,这些链接真的很有帮助。。几个小时来一直试图解决这个问题
module.exports = {
  login : function(id,pass,cb){
      var q = "SELECT * FROM user where id = ? and pass = ?";

      DB.DB.query(q, [id,pass], function (error,result) {
          if(error){
              console.log('not found');
              cb(error, 'unrecognized');
          } else{
              console.log('found');
              cb(null, 'validated');
          }
      });
  }
};
router.post('/loginv', function (req,res) {
  var id = req.body.id;
  var pass = req.body.pass;

  login.login(id,pass, function(err, result) {
    if (err) {
        console.log(err);
        res.send('dont give up');
        return;
    }

    if (result === 'validated') {
      res.sendfile('views/welcome.html');
    }else{
      console.log('Unknown error');
    }
  })
});