我是 Node 新手,我尝试制作一个带有身份验证的基本应用程序。数据存储在 mongoDB 远程服务器上。 我的 HTML 表单将数据 POST 到我的服务器 URL。 这是路线:
app.post('/auth', function(req, res){
handleRequest(req, res);
});
以及被调用的处理程序:
function handleRequest(request, response) {
if (request.method == 'POST') {
console.log("Trying to get POST");
var body = '';
request.on('data', function (data) {
body += data;
});
// Get datas, parse them and create user with it
request.on('end', function () {
var data = JSON.parse(body);
var login = data.login;
var password = data.password;
var email = data.email;
myUser = userClass.create(login,email,password);
console.log ("email : "+email);
console.log ("password : "+password);
// authenticate with user
var auth = userClass.authenticate(myUser,function(result){
console.log("result = "+result);
});
});
}
}
userClass.authenticate:
exports.authenticate = function(user,callback){
var result = "false";
var query = User.where(
{
email : user.email,
password : user.password
});
query.findOne(function(err,user){
if(err){return handleError(err);}
if(user){
result = "true";
}
console.log(user);
});
console.log("callback inc")
callback(result);
}
我很确定它没有优化,但这不是我想要的。 当我启动服务器并向其发送一些 POST(正确)数据时,会发生这种奇怪的事情:
找到了存储在远程数据库中的我的用户,因此在 userClass.authenticate result = true
但是当回调函数运行时,日志说它是错误的。我在回调中做错了什么吗?
最佳答案
如果 query.findOne 是异步的,则您将在 findOne 完成之前调用回调。将回调(结果)放入 findOne 回调中 - 像这样
exports.authenticate = function(user,callback){
var result = "false";
var query = User.where(
{
email : user.email,
password : user.password
});
query.findOne(function(err,user){
if(err){return handleError(err);}
if(user){
result = "true";
}
console.log(user);
callback(result);
});
}
关于javascript - Node.js 上的异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838637/