javascript - Node JS 回调

标签 javascript node.js express

在理解回调时遇到一些困难,这是我的身份验证代码(通过 MySQL)

function authenticate(username, password, callback) {
    var query = "SELECT * from mydb.users where username='" + username + "'and BINARY password='" + password + "'";
    connection.query(query, function (err, rows) {
        if (rows[0] != undefined) {
            if ('username' in rows[0]) {
                if (rows[0].username == username) {
                    callback(true);
                }
            }
        }
        callback(false);
    });
};

exports.assets=function(req,res) {
    var username = req.param("username");
    var password = req.param("password");

    authenticate(username, password, function (didAuthenticate) {
        if (didAuthenticate) {
            console.log("Authenticated");
        }
        else {
            console.log("Failed");
        }
    }); 
};

用户/密码匹配时输出:

Authenticated
Failed

没有匹配:

Failed

为什么当 didAuthenticate 返回 true 时 if/else 语句不起作用?

最佳答案

简单地执行callback(...)并不会结束函数的执行;您需要一个 return 语句来告诉函数停止运行,如下所示:

function authenticate(username, password, callback) {
    var query = "SELECT * from mydb.users where username='" + username + "'and BINARY password='" + password + "'";
    connection.query(query, function (err, rows) {
        if (rows[0] != undefined) {
            if ('username' in rows[0]) {
                if (rows[0].username == username) {
                    return callback(true);
                }
            }
        }
        return callback(false);
    });
};

当您阅读其他 NodeJS 代码时,您将看到使用此技术。

关于javascript - Node JS 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23690952/

相关文章:

javascript - NodeJS/Express : How to get enctype of submitted form?

javascript - 如何从文本文件中获取随机行并将其打印出来

javascript - 如何使用带按钮的 Notify.js?

arrays - 从 Mongoose/MongoDB 中的数组中删除对象

node.js - 使用 SailsJS/Express 在请求之间将对象保存在内存中

node.js - 为什么我的 Nginx 反向代理 node.js+express 服务器重定向到 0.0.0.0?

javascript - 在浏览器中单击按钮时,代码不会执行

javascript - JQuery 选择器按类别从集合中删除子项

javascript - Node.Js 异步使用

javascript - 为 AWS S3 的多个对象创建多个签名 url