我是 node js 的新手,不知道为什么总是返回错误值。我在 html 中制作了发送发布请求的表单,然后 app.js 调用 login.js 函数并检查数据库
我尝试使用 2 var 手动输入并且它有效,但在使用表单时它不起作用。
app.post('/login', urlencodedParser, function (req, res) {
var check = require('./js/login.js');
var username = req.body.username;
var password = req.body.password;
if(check([username,password]) == true){
console.log('fine');
res.render('index');
}
else{
console.log('get lost');
res.render('login');
}
});
这是调用 login.js 的 app.js 代码,但即使返回值不正确,页面也不会呈现。
var check = function(arr){
var con = require(__dirname + '/database.js');
var login_check = false;
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM users WHERE (name = ?) AND (password = ?)", [arr[0], arr[1]], function (err, result, fields) {
if (err) throw err;
if(result)
{
login_check = true;
}
});
});
return login_check;
};
module.exports = check;
最佳答案
因为你的con.query
函数是异步的,所以函数的返回默认总是false(在执行check之前返回)。另一种方法,你可以尝试使用回调函数作为我下面的建议代码:
app.post("/login", urlencodedParser, function(req, res) {
var check = require("./js/login.js");
var username = req.body.username;
var password = req.body.password;
var checkCallback = function (isLogin) {
if (isLogin) {
console.log("fine");
res.render("index");
} else {
console.log("get lost");
res.render("login");
}
}
check([username, password], checkCallback);
});
// -----------------------------
// login.js
var check = function(arr, callback) {
var con = require(__dirname + "/database.js");
var login_check = false;
con.connect(function(err) {
if (err) throw err;
con.query(
"SELECT * FROM users WHERE (name = ?) AND (password = ?)",
[arr[0], arr[1]],
function(err, result, fields) {
if (err) throw err;
if (result) {
login_check = true;
callback(true); // Call the callback function here after checking is done
}
}
);
});
return login_check;
};
module.exports = check;
关于mysql - 如何修复 node.js 代码以检查登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57020126/