【问题标题】:NodeJS HTTP request POST ERROR socket hang upNodeJS HTTP 请求 POST ERROR 套接字挂断
【发布时间】:2013-11-16 06:16:51
【问题描述】:

您好,在给定大量 json 对象数组的情况下,我在 NodeJS 上执行 HTTP 请求时遇到问题。鉴于 json 对象的小数组,该请求工作正常。但是,如果我尝试增加 json 的大小数组,我收到错误:socket hang up {"error":{"code":"ECONNRESET"}}。是否需要执行多次写入?还是另一端出了什么问题?

提前感谢您抽出宝贵时间!

    // data is a json object

    var post_data = JSON.stringify(data);
    var buf = new Buffer(post_data);
    var len = buf.length;

    var options = {
        hostname: address,
        port: port,
        path: pathName,
        method: 'PUT',
        headers: {
            'Content-Type':'application/json',
            'Content-Length': len,
            'Transfer-Encoding':'chunked'
        }
    };

    // http call to REST API server
    var req = restHttp.request(options, function(res) {

        console.log('server PUT response received.');
        var resData = '';
        res.on('data', function(replyData) {

            // Check reply data for error.
            console.log(replyData.toString('utf8'));
            if(replyData !== 'undefined')
                resData += replyData;
        });

        res.on('end', function() {          
            callback(JSON.parse(resData));
        });
    }); 


    req.write(buf);
    req.end();

【问题讨论】:

  • 您可以流式传输请求正文。阅读this帖子了解详情。
  • 感谢您的回复。所以这是一个与流媒体相关的问题?您能否提供一个示例如何在这种情况下应用?
  • 如果buf 中的数据在readable stream 中,那么您只需执行buf.pipe(req)。例如,如果当前目录包含带有 JSON 的文件 data.json,您可以使用 var buf = fs.createReadStream(__dirname + '/data.json'); 创建一个 ReadStream 对象。然后你可以把它传递给你的请求。
  • 更新:buf 是一个 Buffer 对象。您能否提供示例作为答案,以便我可以为您提供帮助:) 谢谢!
  • 太棒了。我在下面添加了答案:)

标签: javascript json node.js http rest


【解决方案1】:

您可以流式传输请求正文。

如果buf 中的数据在readable stream 中,那么您只需执行buf.pipe(req)

例如,如果当前目录包含带有 JSON 的文件 data.json,您可以这样做

var buf = fs.createReadStream(__dirname + '/data.json');

创建一个 ReadStream 对象。然后你可以把它传给你的req

buf.pipe(req);

管道命令在完成流式传输后将调用req.end

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 2022-11-10
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多