variables不被覆盖nodejs

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

console.log:

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

你可以看到从以下代码返回的值ret不会被改变,虽然它遵循function的程序正常..我是新的节点js和js的东西,所以任何意见和build议一定会有所帮助thx 🙂

DB.query()是asynchronous的,所以login函数在返回ret之前不要等待代码的执行。 您需要添加callbacklogin方法(或使用承诺)。

工作代码:

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

我build议你阅读这里发布的链接和这个问题 ,可以给你一个callback和承诺的想法。

PS:我不知道你使用的是哪个库,但是在进行查询之前,你必须清理input,如果库没有为你做