我在节点中使用 postgresql 模块'pg'。当从数据库返回一行时,我想做一些处理,但我不知道如何将值返回给调用函数。
var caller = function(){
var query = client.query(qString);
query.on('row', function(row){
if (row.foo == bar) {
return true;
} else {
return false;
}
}
};
当我打电话时:
var boo = caller();
我希望 boo 等于回调的返回布尔值。
我试图声明一个未初始化的变量,然后分配返回的布尔值,
var caller = function(){
var fido;
var query = client.query(qString);
query.on('row', function(row){
if (row.foo == bar) {
fido = true;
} else {
fido = false;
}
}
return fido;
};
但该函数不会等到 'pg' 返回一行。这会导致返回的变量返回未定义。我想我需要同步调用其中的一部分,以便在函数返回变量之前分配变量,但我不确定如何为普通函数执行此操作。
编辑:
伪代码就够了。我是 Node 新手,并试图在提问方面做得更好。这是我所在的一个类的应用程序。我用 web.py 用 python 编写了大部分内容,并且由于与 angular.js 框架冲突并在 node.js 中重新编写,我没有太多经验和。我遇到问题的部分是身份验证用户。这是被调用的模块。
var postAuth = function(params, callback){
var user = params['username'];
var pass = params['password'];
var result;
util['dispatch']['auth'](user, function(blah){
if (pass == blah) {
result = true;
} else {
result = false;
}
});
console.log(result);
return callback(200, "OK", {}, result);
}
以及从数据库获取用户名密码的函数:
var auth = function(user, callback) {
client.connect();
var qString = "SELECT password FROM users WHERE username='" + user + "'";
var query = client.query(qString);
query.on('row', function(row) {
callback(row.password);
});
};
我知道这是一种不安全的身份验证方式。我想知道是否有更好的方法来做到这一点。我试图根据密码是否匹配返回一个布尔值。