mysql - NodeJS 和 MySQL,处理行

标签 mysql node.js

我是 NodeJS 初学者,目前正在使用 node、express 和 mysql 包。我正在尝试检查此人是否已经注册。

如果是这样,则应执行以下代码:

    req.session.user = user;
    req.flash('success_notification', 'You are logged in');
    console.log("creating session :" ,req.session.user);

但是,当我尝试检查它是否设置为 true 时,authenticated 始终保持“false”。

 if (authenticated === true)

有人知道我做错了什么吗?

这是我处理登录尝试的代码:

router.post('/login', function (req, res) {
    var user = req.body.username;
    var password = req.body.password;
    var authenticated = false;

    var query = "Select * from  user where username = \'" + user + "\'" + " AND pw = \'" + password  + "\'";

    connection.query(query, function (err,rows,fields) {
        if (err) console.log(err);
        else if (rows.length) {
            authenticated = true;
            console.log(authenticated);
        }
        else {
            console.log('False Password or Username');
        }
    });

    console.log(authenticated);
    if (authenticated === true) {
        req.session.user = user;
        req.flash('success_notification', 'You are logged in');
        console.log("creating session :" ,req.session.user);
    }

    res.redirect('/');    
});

最佳答案

这是一个回调问题。

我也遇到了同样的问题。

条件 if (authenticated === true) 在查询完成之前得到验证并返回,因此 authenticated 仅在查询完成后才变为 true它验证了自己。

让它适用于任何类型的 bool 查询返回的方法是将其包含在您的查询中以创建回调函数。

因此,如果您将条件封装在查询中,它应该可以正常工作。

router.post('/login', function (req, res) {
    var user = req.body.username;
    var password = req.body.password;
    //var authenticated = false;

    var query = "Select * from  user where username = \'" + user + "\'" + " AND pw = \'" + password  + "\'";

    connection.query(query, function (err,rows,fields) {

        var authenticated = false; //Encapsulate your authenticated variable since you won't need it outside this scope

        if (err) console.log(err);
        else if (rows.length) {
            authenticated = true;
            console.log(authenticated);
        }
        else {
            console.log('False Password or Username');
        }

        /** Moved here */
        console.log(authenticated);
        if (authenticated === true) {
            req.session.user = user;
            req.flash('success_notification', 'You are logged in');
            console.log("creating session :" ,req.session.user);
        }

        res.redirect('/');

    });

    // Moved wihin the your query
    /*
    console.log(authenticated);
    if (authenticated === true) {
        req.session.user = user;
        req.flash('success_notification', 'You are logged in');
        console.log("creating session :" ,req.session.user);
    }

    res.redirect('/');
    */

});

关于mysql - NodeJS 和 MySQL,处理行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41613643/

相关文章:

mysql - 表中具有相同值的其他行的计数

node.js - 尝试结束 Express js 路由中的代码执行

node.js - 未找到 MongoDB 数据/数据库

php - 获取连接中的下一条和上一条记录

mysql - 为什么我不能对 SQL 'rank scores' 使用 dense_rank?

用于验证电子邮件的 MySQL 正则表达式不起作用 - 大括号量词被忽略

php - 具有相同变量的多个输入

javascript - AngularJS/Jade 错误 : Argument 'MyController' is not a function, 未定义(平均值)

javascript - 如何构建本地 node.js 邮件服务器

javascript - NodeJS 和 ES6 类实例中的变量可见性