【发布时间】:2017-08-18 20:35:42
【问题描述】:
我在 node.js 中使用 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 等于回调返回的 bool。
我试图声明一个未初始化的变量,然后将返回的布尔值赋值,
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);
});
};
我知道这是一种不安全的身份验证方式。我想知道是否有更好的方法来做到这一点。我正在尝试根据密码是否匹配返回一个布尔值。
【问题讨论】:
-
查看stackoverflow.com/a/16021543/893780 我回答了类似问题。
-
查看编辑,仍然返回未定义。
-
关于您的编辑:
quecall不返回值,所以returned当然是undefined。您应该按照@robertklep 的建议将回调传递给caller。 -
查看编辑:从我的应用程序中添加了真实代码而不是伪代码。
-
感谢您的帮助,结束了使用我的身份验证脚本中的 db 连接烘焙实用程序文件以使其正常工作。