NodeJS HTTP请求POST ERROR套接字挂起

时间:2013-11-05 11:25:12

标签: javascript json node.js http rest

嗨我在给定更大数量的json对象数组时在NodeJS上执行HTTP请求时遇到问题。给定json对象的小数组,请求工作正常。但是,如果我尝试增加json的size数组,我收到错误: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();

1 个答案:

答案 0 :(得分:2)

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

如果buf中的数据位于readable stream,那么您可以buf.pipe(req)

例如,如果当前目录包含带有JSON的文件data.json,则可以执行

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

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

buf.pipe(req);

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