我想做类似的事情:
//client -> notifies server that client is connected.
//server -> begins fetching information from DB (series of both async and synchronous requests).
//as sets of data become available on server -> server pushes updates to client via res.render()
基本上我在客户端上有一个菜单项,我想更新该菜单作为服务器提取的数据准备好了。有没有办法做到这一点?我注意到我无法做到
res.render('something');
// again
res.render('somethingElse');
因为一旦调用了render,就会发送响应,并且不能再次调用render
"错误:发送后无法设置标头。"
有什么建议吗?
答案 0 :(得分:3)
答案 1 :(得分:2)
HTTP通过请求/响应工作。通常,一旦发送响应,就终止连接。
要将数据从服务器流式传输到客户端,您可以使用websockets。有一个非常流行的名为socket.io的node.js模块,它简化了使用websockets。
使用socket.io,客户端代码如下所示:
var socket = io.connect('http://yourserver.com');
socket.on('data', function (data) {
updateMenu(data);
});
服务器代码:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('data', data);
getMoreDataFromDb(function(data){
socket.emit('data', data);
});
// etc..
});
或者,如果您想要一个更简单的解决方案,您可以向服务器发出多个小的ajax请求,直到您获得所有数据:
(function getData(dataId){
$.ajax({
url:"yourserver.com/getdata",
data: dataId || {},
success:function(data){
updateMenu(data);
if(data) getData({ lastDataReceived: data.lastId }); // server is still returning data, request more
}
});
})();