javascript - 如何解决 NODE.Js HTTP POST "ECONNRESET"错误

标签 javascript json node.js http

我有这个函数,传递给这个函数的以下数据返回一个 ECONNRESET,套接字挂起错误。然而,当 discountCode 数组减少到只有 10 个对象时,它可以 POST 没有任何问题。

这个问题的原因是什么?我尝试通过对缓冲区中的数据进行分段来执行多个 req.write(),但是效果不佳。任何 NodeJs 忍者都可以对这个问题给出一些见解吗?

createObj: function(data, address, port, callback) {

//console.log('Create Reward: '+JSON.stringify(data));
var post_data = JSON.stringify(data);

var pathName = '/me/api/v1/yyy/'+data.idBusinessClient+'/newObj';

    // 
    var options = {
        hostname: address,
        port: port,
        path: pathName,
        method: 'POST',
        headers: {
            'Content-Type': 'application/json; charset=utf-8',
            'Accept': 'application/json',
            'Accept-Encoding': 'gzip,deflate,sdch',
            'Accept-Language': 'en-US,en;q=0.8'
        }
    };

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

        console.log('HTTP API server PUT Reward 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() {
            //<TODO>Process the data</TODO>             
            callback(JSON.parse(resData));
        });
    });

    req.write(post_data);
    req.end();

    console.log('write end');

    req.on('close', function() {
        console.log('connection closed!');
    });

    req.on('error', function(err) {
        console.log('http request error : '+err);
        callback({'error':err});
        throw err;
    });

    req.on('socket', function(socket) {
        console.log('socket size:'+socket.bufferSize);
        socket.on('data', function(data) {
            console.log('socket data:'+data);
        });
    });

}

]}`

最佳答案

我遇到了同样的问题,并且能够通过添加 Content-Length header 来解决它:

    headers: {
        'Content-Type': 'application/json; charset=utf-8',
        'Content-Length': Buffer.byteLength(post_data),
        'Accept': 'application/json',
        'Accept-Encoding': 'gzip,deflate,sdch',
        'Accept-Language': 'en-US,en;q=0.8'
    }

但是,我仍然不清楚为什么缺少 Content-Length header 会导致这样的麻烦。我认为这是内部 Node.js 代码中的某种怪异之处。也许你甚至可以称它为错误,但我不确定 ;)

PS:我非常想知道有关此问题原因的更多信息。因此,如果您有任何想法,请发表评论...

关于javascript - 如何解决 NODE.Js HTTP POST "ECONNRESET"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19810530/

相关文章:

javascript - 将 AngularJS 与 innerHTML 一起使用

javascript - 在 HTML 中使用 JSON 脚本并显示数据

javascript - 是否可以将 d3.js 与 gatsby.js 框架一起使用?

node.js - 编辑组件 html 时 Angular CLI 不会重新加载?

javascript - 如何在 JSDoc 中引用模块中的常量

javascript - 文本换行,使用call函数传递数据

javascript - 模式按钮的切换 View

javascript - 使用 SJCL 获取 sha256 哈希的十六进制表示

C#:如何在一个文件中读取 'éóú' 和 öäü 等字符?

javascript - 如何从 Google 表格中获取超链接