【问题标题】:Node.js Express rendering multiple subsequent viewsNode.js Express 渲染多个后续视图
【发布时间】:2013-08-25 23:21:39
【问题描述】:

我想做这样的事情:

//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,就会发送response,不能再次调用render

“错误:发送后无法设置标头。”

有什么建议吗?

【问题讨论】:

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

标签: node.js express views rendering


【解决方案1】:

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

http://en.wikipedia.org/wiki/WebSocket

这篇文章有一点信息:

Which websocket library to use with Node.js?

【讨论】:

    【解决方案2】:

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

    要将数据从服务器流式传输到客户端,您可以使用websockets。有一个非常流行的 node.js 模块,名为 socket.io,它简化了 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
            }
        });
    
    })();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 2015-03-23
      • 2015-10-05
      • 1970-01-01
      • 2012-11-29
      • 2011-09-25
      • 2014-06-01
      • 1970-01-01
      相关资源
      最近更新 更多