6

この関数があり、この関数に渡される以下のデータは ECONNRESET、ソケット ハングアップ エラーを返します。ただし、discountCode 配列が 10 個のオブジェクトのみのように削減されると、問題なく POST できます。

この問題の原因は何ですか? Buffer 内のデータをセグメント化して複数の 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);
        });
    });

}

]}`

4

3 に答える 3

7

私は同じ問題を抱えていましたが、Content-Length ヘッダーを追加することで解決できました。

    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 ヘッダーがないためにこのような問題が発生する理由はまだはっきりしていません。内部の Node.js コードに何らかの奇妙さがあると思います。多分あなたはそれをバグと呼ぶことさえできますが、私はそれについて確信が持てません;)

PS: この問題の原因についてもっと知りたいです。というわけで、何かお気づきの点がありましたら、コメントを残してください...

于 2014-01-10T12:00:41.407 に答える