NodeJS HTTP请求POST错误套接字挂起

3

您好,我在NodeJS上用一个更大的json对象数组执行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();

您可以流式传输请求正文。有关详细信息,请阅读此文章:http://www.sitepoint.com/introduction-to-streams/。 - Bulkan
谢谢您的回复。所以这是与流媒体相关的问题吗?您能否提供一个示例,说明它如何适用于这种情况? - Hong Zhou
如果buf中的数据是可读流,则可以使用buf.pipe(req)进行传输。例如,如果当前目录包含一个名为data.json的文件,并且其中包含JSON数据,则可以使用var buf = fs.createReadStream(__dirname + '/data.json');来创建一个ReadStream对象。然后,您可以将其传输到您的请求中。 - Bulkan
更新:buf是一个缓冲对象。您能否提供示例作为答案,以便我可以感谢您的帮助 :) 谢谢! - Hong Zhou
太棒了。我已经添加了答案 :) - Bulkan
显示剩余2条评论
1个回答

2

您可以流式传输请求体。

如果buf中的数据是可读流,那么您只需执行buf.pipe(req)即可。

例如,如果当前目录包含一个名为data.json的文件,并带有JSON数据,则可以执行以下操作

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

创建一个ReadStream对象。然后,您可以将其导入到req中。
buf.pipe(req);

管道命令会在流完成后调用req.end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接