Node.js 从postgresql池返回布尔值
我目前正在尝试验证从postgresql调用另一个函数的函数中的用户名和密码。我的验证应该在validate函数中返回true,但它不返回true。上面的console.log可以工作,我实际使用validate()时使用的参数应该返回true,但不是Node.js 从postgresql池返回布尔值,node.js,postgresql,Node.js,Postgresql,我目前正在尝试验证从postgresql调用另一个函数的函数中的用户名和密码。我的验证应该在validate函数中返回true,但它不返回true。上面的console.log可以工作,我实际使用validate()时使用的参数应该返回true,但不是 function validate(username, password){ //PG Connect pool.connect((err, client, done)=>{ if(err){ return cons
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();
});
});
函数验证(用户名、密码){
//PG连接
连接池((错误、客户端、完成)=>{
如果(错误){
返回console.error('从池中提取客户端时出错',err);
}
client.query('SELECT*FROM users',(err,result)=>{
如果(错误){
返回console.error('error running query',err');
}
for(设i=0;i
}问题在于,返回的是查询的回调函数,而不是父函数。这意味着
validate()
实际上没有返回任何内容
一个简单的解决方案是在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()
调用都被捕获在中,那么
您永远不会通过请求数据库中的所有用户记录来验证用户。这是我见过的最糟糕的解决方案。您应该将用户详细信息作为参数传递到查询中。