2013-08-25 111 views
1

我要像做多後續的觀點:Node.js的快速渲染

//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'); 

因爲一旦渲染被調用,那麼響應被髮送出去,使不能再稱爲

「錯誤:發送之後無法設置頁眉」

有什麼建議嗎?

+0

將推送數據從服務器到客戶端您的投票解決方案的替代方案? –

回答

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

})();