app.post('/login', function (req, res) {
var login = req.body.login;
var pass = req.body.pass;
var ret = CheckUserValid(login, pass);
res.send(ret);
})
function CheckUserValid(login, pass,callback) {
var sql = "SELECT * FROM `user` WHERE login = ? AND pass= ?";
client.query(sql, [login, pass], function selectResutl(err, results, fields) {
console.log(results);
if (!err) return true;
else
throw err;
});
}
第一个函数是关于请求,第二个是关于调用mysql。因为它是异步的所以它不起作用。 有人可以让我知道如何让它像C#一样同步工作。
答案 0 :(得分:4)
CheckUserValid
方法的签名已经隐含callback
。
您可以使用它在db-request完成时调用某些内容,如下所示:
app.post('/login', function (req, res) {
var login = req.body.login;
var pass = req.body.pass;
// use a closure here for the callback of checkUserValid
checkUserValid(login, pass, function(err, isValid) {
// send the response when checkUserValid is done
res.send(isValid)
});
})
function checkUserValid(login, pass, callback) {
var sql = "SELECT * FROM `user` WHERE login = ? AND pass= ?";
client.query(sql, [login, pass], function(err, results, fields) {
console.log(results);
if (!err) {
// there is no error, pass null for the error
// and true for the result
callback(null, true);
} else {
// an error occurred in the db-query
// pass it to the callback
callback(err)
}
});
}
按照惯例,您应该将err
作为第一个参数传递,但最终由您决定。
但是,您可以将原始错误传递给初始函数并在那里处理。
答案 1 :(得分:3)
您应该查看Fibers模块。
答案 2 :(得分:1)
您可以按顺序链接要调用的函数
e.g。您可以res.send(ret);
作为CheckUserValid