可能已经有了这个问题的答案但我无法找到它。
假设我有一个Node.js网页做了一些耗时的API调用和计算:
var request = require('request'),
Promise = require('es6-promise').Promise,
is_open = require('./is_open');
// Fetch the name of every eatery
var api_url = 'url of some api';
request(api_url, function (error, response, body) {
if (error) {
console.log(error);
} else if (!error && response.statusCode == 200) {
// Good to go!
var results = JSON.parse(body).events;
results.(function (result) {
// This line makes its own set of API calls
is_open(result
.then(function (output) {
console.log(output);
if (output == false) {
console.log('CLOSED\n');
} else {
console.log(output);
console.log();
}
})
.catch(console.error);
});
} else {
console.log('Returned an unknown error.');
console.log(error);
console.log(response);
console.log(body);
}
});
(我还没有创建一个真正的Web服务器,我只是通过命令行在本地运行应用程序。)
我希望Web服务器首先为每个用户提供加载页面。然后,一旦API调用完成且数据准备就绪,它应该将新数据发送给同一个用户。
我认为存在问题的原因是因为为了提供网页,您必须以:
结束res.end();
因此结束与该特定用户的连接。
感谢您的帮助!
答案 0 :(得分:0)
您必须在概念上将静态内容与动态内容分开(稍后您将使用nginx或apache提供静态,只留下动态到节点)
解决问题的最佳解决方案"是加载后第一个网页通过AJAX询问数据。理想情况下,您的节点应用程序将从第一页返回JSON到ajax查询,页面上的js将格式化创建DOM节点的结果。