Node.js Express呈现多个后续视图

Node.js Express呈现多个后续视图,node.js,express,views,rendering,Node.js,Express,Views,Rendering,我想做一些类似的事情: //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 cli

我想做一些类似的事情:

//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

错误:发送邮件后无法设置邮件头


有什么建议吗?

您可能会从使用WebSocket中受益:

这篇文章有一些信息:


您可能会从使用WebSocket中受益:

这篇文章有一些信息:


HTTP通过请求/响应工作。通常,一旦发送响应,连接就会终止

要将数据从服务器流式传输到客户端,可以使用。有一个非常流行的名为node.js的模块,它简化了WebSocket的使用

使用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
        }
    });

})();

HTTP通过请求/响应工作。通常,一旦发送响应,连接就会终止

要将数据从服务器流式传输到客户端,可以使用。有一个非常流行的名为node.js的模块,它简化了WebSocket的使用

使用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
        }
    });

})();

将数据从服务器推送到客户端是否是轮询解决方案的替代方案?将数据从服务器推送到客户端是否是轮询解决方案的替代方案?