0

BigCommerce から注文の詳細を取得するノード アプリを実装しています。Restify JsonClient を使用して BigCommerce API への複数の呼び出しが非同期で行われます。

一部の呼び出しでは正常に動作しますが、その後エラーが発生します: [Error: socket hang up] code: 'ECONNRESET', sslError: undefined, body: {}

を設定してソケットプーリングをオフにしようとしましagent=falseたが、それでも同じエラーが発生します。

以下は、BigCommerce API を呼び出すコードです。

makeRequest = function (url, params, headers, orderDetails, cb) {
                var options = {
              headers: headers
              };

                var client = restify.createJsonClient({
                    url: url
                });

                client.get(options, function(err, req, res, obj) {
                    if(err){
                        console.log(err);
                        cb(err,obj);
                    } else if(obj != null) {
                        var result = obj;
                        if(orderDetails == null) {
                            cb(null,result);
                        } else {
                            cb(null, result , orderDetails);
                        }
                    }
                });
            };

次のエラーが表示されます。

{ [Error: socket hang up] code: 'ECONNRESET', sslError: unde
fined, body: {} } Error: socket hang up
    at SecurePair.error (tls.js:993:23)
    at EncryptedStream.CryptoStream._done (tls.js:689:22)
    at CleartextStream.read [as _read] (tls.js:490:24)
    at CleartextStream.Readable.read (_stream_readable.js:320:10)
    at EncryptedStream.onCryptoStreamFinish (tls.js:301:47)
    at EncryptedStream.g (events.js:175:14)
    at EncryptedStream.EventEmitter.emit (events.js:117:20)
    at finishMaybe (_stream_writable.js:352:12)
    at endWritable (_stream_writable.js:359:3)
    at EncryptedStream.Writable.end (_stream_writable.js:337:5)
    at EncryptedStream.CryptoStream.end (tls.js:628:31)
    at Socket.onend (_stream_readable.js:483:10) 

なぜこのようなエラーが発生するのですか? どうすればそれを処理できますか?

ありがとう

4

2 に答える 2

1

正しい領域でエージェント設定を設定していることを確認したかっただけです.

含む

「エージェント」:偽

あなたのオプションで。(貼り付けたコードのオプションには設定されていません)

ここのコメントの gfpacheco ごと: https://github.com/restify/node-restify/issues/485

デフォルトでは、NodeJS はエージェントを使用して TCP 接続を開いたままにしておくため、再利用できます。問題は、サーバーが閉じられているか、何らかの理由で接続が閉じられている場合、ECONNRESET エラーが発生することです。

クライアントの作成時に agent: false を設定する必要があるたびに接続を閉じるには

私はこの解決策を試しましたが、うまくいきました。

それ以外は、

"secureOptions": "constants.SSL_OP_NO_TLSv1_2"

ここに投稿されたソリューションは、sslErrorを取得しているため、正しいパスのように思えます。

于 2016-04-21T14:58:49.117 に答える