javascript - Node.js 上的异步问题

标签 javascript node.js asynchronous express callback

我是 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(正确)数据时,会发生这种奇怪的事情: execution

找到了存储在远程数据库中的我的用户,因此在 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/

相关文章:

javascript - CKEditor只读

javascript - 如何将任务添加到当前方法?

multithreading - 如何在不等待的情况下从 channel 获取值

javascript - 如何从异步调用返回响应?

javascript - 在函数内部修改变量后,为什么变量未更改? -异步代码引用

javascript - "Resource interpreted as script but transferred with MIME type application/json"使用 Youtube 的 JavaScript API

javascript - 输入值更改时更新 HTML 值

node.js - typescript 错误 1062 : "Type is referenced directly or indirectly in the fulfillment callback of its own ' then' method."

javascript - Browserify 产生一个*巨大*的输出文件

node.js - 我们可以在 Nestjs 中使用所有 Node npm 包吗