我最近开始使用NodeJs,并且我正在尝试创建一个API,它将从Web获取一些信息并将其编译并显示给用户。
我的问题是以下
router.get('/', function (req, res, next) {
https.get(pageUrl, function (res) {
res.on('data', function (responseBuffer) {
//Important info;
info = responseBuffer;
}
}
res.render('page', { important: info});
}
我怎么能等到我有" info" var然后发送res.render。因为现在如果我试着等待,通常程序结束并且不等待结果。
感谢。
答案 0 :(得分:4)
假设您的https.get
来电为您提供了一个包含'end'
事件 [1] 的信息流,您可以执行以下操作:
router.get('/', function (req, res, next) {
https.get(pageUrl, function (res) {
var info;
res.on('data', function (responseBuffer) {
//Important info;
info = responseBuffer;
}
res.on('end', function() {
res.render('page', { important: info});
})
}
}
请注意,上述代码无效,因为您使用res
回调中的res
参数隐藏了基本https.get
参数。
另请注意,'data'
事件可能会多次发出(同样,假设标准流实现 [1] ),因此您应该在{{1}中累积结果变量。
[1] 您能否发布有关您的代码的更多信息,例如info
库的来源(它是标准的HTTPS库吗?)。
个人想法:我强烈建议使用request module,通过https
对NPM提出异议,以获取对外部服务的HTTP(S)请求。它有一个简洁的界面,易于使用并为您处理很多情况(重定向是一个例子,JSON和npm install request
另一个)。