我正在实施一个节点应用,它会从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)
为什么我会收到这样的错误?我该怎么处理呢?
由于
答案 0 :(得分:1)
我只是想确保您在正确的区域设置代理设置。
包括
" agent":false
在您的选项中。 (它未在您粘贴的代码中的选项中设置)
在这里的评论中每个gfpacheco:https://github.com/restify/node-restify/issues/485
默认情况下,NodeJS使用代理保持TCP连接处于打开状态,因此您可以重复使用它。 问题是,如果服务器已关闭,或者由于某种原因它关闭了您的连接,则会出现ECONNRESET错误。
每次只需要在客户端创建中设置agent:false时关闭连接
我已经尝试过这个解决方案,它对我有用。
除此之外,
" secureOptions":" constants.SSL_OP_NO_TLSv1_2"
此处发布的解决方案听起来可能是正确的路径,因为您正在获取 sslError 。
答案 1 :(得分:0)
也许您遇到了这个问题https://github.com/joyent/node/issues/5360
TL; DR:您可以尝试使用最新的节点版本,并在您的选项中添加secureOptions: constants.SSL_OP_NO_TLSv1_2
。