我第一次玩Node.JS应用程序,到目前为止我很喜欢它,但我遇到了问题......
我在client.query函数上编写了一个包装器函数,它只允许我传递一个参数,它从一组允许的查询中获取查询......
var runProcedure = function(proc, vars){
var params;
if(typeof vars != 'undefined'){
params.concat(eval('(' + vars + ')'));
}
this._client.query(queries[proc], params, function(err, results, fields){
if(err) { throw err; }
if(results){
return(results);
}else{
return "No data found.";
}
});
}
该函数正常工作,如果我调试console.log结果,我想要的数据就在那里..但是,它没有返回到我调用的地方......
var data = runProcedure(procedureName, parameters);
console.log(data); // undefined
在排除故障时,似乎异步运行查询功能....但这会给我带来很大的问题。从http请求处理程序中调用runProcedure函数。所以我需要能够访问响应变量。我想我可以将它作为参数一直传递下来......但这看起来很笨拙。处理这个问题的最佳代码模式是什么?我应该将响应设置为全局变量吗?我可以同步运行mysql吗?
干杯,
whiteatom
答案 0 :(得分:0)
只需将您的数据传递给回调,而不是使用return
var runProcedure = function(proc, vars, callback) {
var params;
if(typeof vars != 'undefined'){
params.concat(eval('(' + vars + ')'));
}
this._client.query(queries[proc], params, function(err, results, fields){
if(err) { throw err; }
if(results){
callback(results);
}else{
callback('No data found.');
}
});
}
现在在http请求处理程序中:
// ...
function httpRequestHandler(req, resp)
{
//...
runProcedure(proc, vars, function(dbResp) {
if (dbResp === 'No data found.')
{
// handle error
} else {
// do something with result
}
})
}