2016-08-30 91 views
1

我正在從我的HTTP服務器向客戶端發送JSON數據。我已經成功地向客戶端發送了較小尺寸的JSON響應,但是一旦我必須等待並在發送之前收集所有數據,我的代碼才能正常工作。我正在使用.on('data',function(){})方法收集數據並構建它備份,.on('end',function(){})嘗試發送數據,但是我的代碼永遠不會進入這些方法。使用節點通過HTTP發送更大的JSON字符串使用節點

我發送了更大尺寸的JSON數據代碼如下:

exports.sendJson = function (req, resp, data) { 

    resp.writeHead(200, "Valid EndPoints", { "Content-Type": "application/json" }); 

    var payload = ''; 

    resp.on('data', function(data){ 
      payload += data; 
     }) 
     .on('end', function(){ 
     resp.write(JSON.stringify(payload)); 
     }); 
    resp.end(); 
    }; 

我的代碼工作正常,更小尺寸的JSON數據如下:提前

exports.sendJson = function (req, resp, data) { 
    resp.writeHead(200, { "Content-Type": "application/json" }); 

    if(data) { 
     resp.write(JSON.stringify(data)); 
    } 

     resp.end(); 
    }; 

感謝。我其實很高興,我得到了這一點。

+0

你可以顯示'data'事件的發射器嗎? – DrakaSAN

回答

0

HTTP服務器響應是Writable;它不會發出data事件。

如果您傳遞給sendJsondata參數的對象是一個對象,那麼您只需在第二個示例中執行該操作即可。沒有必要緩衝任何東西。 (如果您傳遞給sendJson的事情是一個流,只是它pipe到響應。)

(當分析接收到的JSON,你必須緩衝你從Readable獲取數據 - 客戶端的HTTP響應)