2016-08-30 74 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响应)