【问题标题】:Returning boolean from postgresql pool从 postgresql 池返回布尔值
【发布时间】:2018-06-03 12:00:10
【问题描述】:

我目前正在尝试在从 postgresql 调用另一个函数的函数中验证用户名和密码。我的验证应该在 validate 函数中返回 true,但事实并非如此。它上面的 console.log 可以正常工作,我在实际使用 validate() 时使用的参数应该返回 true,但不是。

function validate(username, password){
//PG Connect
pool.connect((err, client, done)=>{
    if(err){
        return console.error('error fetching client from pool', err);
    }
    client.query('SELECT * FROM users', (err, result)=>{
        if(err){
            return console.error('error running query', err);
        }


        for(let i = 0; i < result.rows.length; i++){
            if(result.rows[i].username.trim() == username && result.rows[i].password.trim() == password){
                console.log("this works");
                return true; //this doesn't return true when I call the function
            }
            console.log(result.rows[i].username.trim() + " " + result.rows[i].password.trim());
        }
        return false;
        done();

    });
});

}

【问题讨论】:

  • 您永远不会通过从数据库中请求所有用户记录来验证用户。这是我见过的最糟糕的解决方案。您应该将用户详细信息作为参数传递到查询中。

标签: node.js postgresql


【解决方案1】:

问题是您在查询的回调而不是父函数中返回。这意味着validate() 实际上没有返回任何东西。

一个简单的解决方案是使用 Promise 或 validate 回调。以下是实现 Promise 方法的方法...

function validate(username, password) {
    return new Promise((resolve, reject) =>
        pool.connect((err, client, done) => {
            if (err) {
                return reject(err);
            }

            client.query('', (err, results) => {
                done();

                if (err) {
                    return reject(err);
                }

                // logic here

                resolve(false); // failed validation
            });
        });
    });
}

你会这样使用它...

validate('username', 'password')
    .then(valid => console.log(valid))
    .catch(err => console.error(err));

您的所有reject() 调用都在catch 中捕获,所有resolve() 调用都在then 中捕获。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多