javascript - 变量没有被覆盖nodejs

标签 javascript node.js

    router.post('/loginv', function (req,res) {
  var id = req.body.id;
  var pass = req.body.pass;

  if(login.login(id,pass)=='validated'){
    res.sendfile('views/welcome.html');
  }else{
    res.send('dont give up');
  }

  var result = login.login(id,pass);
  console.log(result);
});
<小时/>
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;
    }};

控制台.log:

    GET /login 304 4.028 ms - -
default
POST /loginv 200 40.558 ms - 12
found
found

正如您所看到的,从以下代码返回的值 ret 没有被更改,尽管它正确地遵循了函数的过程。 我是 Node js 和 js 的新手,所以任何评论和建议肯定会有帮助,谢谢:)

最佳答案

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

工作代码:

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

我建议您阅读发布的链接 herethis question这可以让您了解回调和 promise 。

PS:我不知道您使用哪个库来存储数据库,但是如果该库没有为您执行此操作,您必须在执行查询之前清理输入

关于javascript - 变量没有被覆盖nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36882581/

相关文章:

node.js - mongodb 无法连接到服务器 [127.0.0.1 :27017] on first connect

node.js - nodejs + postgresql 太慢了

javascript - axios不捕获数据并发送给客户端

node.js - 使用 socket.io 中的对象

javascript - 尽管有多个错误,但 AJV 只返回一个错误

javascript - 如何在 PHP 中使用 JavaScript(AJAX) 变量

javascript - 代码中未包含涉及值的Javascript运行时错误

javascript - 粘性标题从顶部滑入固定位置

javascript - 如何获取 XML 标签内的内容来创建数组?

javascript - jquery 替换 html 和 javascript 函数