这个问题听起来可能与here的问题完全重复,但我的情况却与众不同。我有getSystemIds.js
这样的文件:
var system_ids_list = {};
var getSystemIDs = function(req, callback) {
var client = //creating an object using internally developed node library
client.request('sql_parameter', {'Query.ID' : query_number},
function(err, req, res){
//Do some stuff to calculate necessary values
system_ids_list[key_value] = value_array;
i+= 1;
}
return(req, callback)
}
)
};
module.exports = getSystemIDs;
现在,如上面链接中的答案所示,我在app.js
appSSL.get('/sysids', function(req, res) {
var sys_ids = system_ids_list(req, function(err, sys_ids) {
res.render('sysids', sys_ids);
})
});
我没有收到任何具体的错误,但网页永远不会加载,好像某些东西卡在流程中,或者它不知道下一步该去哪里。有人可以帮我弄清楚这是最好的方法吗?
答案 0 :(得分:1)
你的getSystemIds()
函数永远不会调用传递给它的回调,因此getSystemIds()
的调用者永远不会得到结果 - 因此请求中没有任何事情发生。
将其更改为:
var system_ids_list = {};
var getSystemIDs = function (req, callback) {
var client = //creating an object using internally developed node library
client.request('sql_parameter', {'Query.ID': query_number}, function (err, req, res) {
//Do some stuff to calculate necessary values
system_ids_list[key_value] = value_array;
i += 1;
// call the callback now to communicate back the async results
callback(null, system_ids_list);
});
};
module.exports = getSystemIDs;
您构建代码的方式,system_ids_list
每次调用getSystemIDs()
时都会积累越来越多的值。这似乎是构建事物的一种奇怪的方式所以我指出这一点,以防万一这不是你想要的。
此外,您的getSystemIDs()
函数不会返回任何内容,因此您应该更改此内容:
appSSL.get('/sysids', function(req, res) {
var sys_ids = system_ids_list(req, function(err, sys_ids) {
res.render('sysids', sys_ids);
});
});
以减少对正在发生的事情的误解:
appSSL.get('/sysids', function(req, res) {
system_ids_list(req, function(err, sys_ids) {
res.render('sysids', sys_ids);
});
});
并且,如果res.render()
来自ExpressJS之类的系统,那么您可能希望传递一个对象并命名一个模板:
res.render('sometemplate.html', {sysids: sys_ids});
如果您希望system_ids_list
不累积值,但每次都要返回一个新值,您可以在函数中定义它,如下所示:
var getSystemIDs = function (req, callback) {
var system_ids_list = {};
var client = //creating an object using internally developed node library
client.request('sql_parameter', {'Query.ID': query_number}, function (err, req, res) {
//Do some stuff to calculate necessary values
system_ids_list[key_value] = value_array;
i += 1;
// call the callback now to communicate back the async results
callback(null, system_ids_list);
});
};
module.exports = getSystemIDs;