Javascript Node.JS未经处理的异常与HTTPS请求

Javascript Node.JS未经处理的异常与HTTPS请求,javascript,node.js,https,Javascript,Node.js,Https,我需要一些帮助来阻止node抛出此错误,或者至少理解为什么我似乎无法捕获它: events.js:72 throw er; // Unhandled 'error' event ^ Error: socket hang up at SecurePair.error (tls.js:999:23) at EncryptedStream.CryptoStream._done (tls.js:695:22) at CleartextStream.read [as _read

我需要一些帮助来阻止node抛出此错误,或者至少理解为什么我似乎无法捕获它:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: socket hang up
at SecurePair.error (tls.js:999:23)
at EncryptedStream.CryptoStream._done (tls.js:695:22)
at CleartextStream.read [as _read] (tls.js:496: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:354:12)
at endWritable (_stream_writable.js:361:3)
at EncryptedStream.Writable.end (_stream_writable.js:339:5)
at EncryptedStream.CryptoStream.end (tls.js:633:31)
at Socket.onend (_stream_readable.js:483:10)
这是导致错误的代码段:

var req = https.request(options, function(res) {
  res.setEncoding('utf8');
  var buffer = '';
  res.on('data', function(data) {
    buffer += data;
  });
  res.on('end', function() {
    try {
      var json = JSON.parse(buffer);
    } catch (err) {
      return callback(err);
    }
    callback(null, json);
  });
});
req.on('error', function(err) {
  callback(err);
});
req.end(data);

api.prototype._get = function(action, callback, args) {
  args = _.compactObject(args);
  var path = '/api/' + action + '/?' + querystring.stringify(args);
  this._request('get', path, undefined, callback, args)
}

api.prototype._post = function(action, callback, args) {
  var path = '/api/' + action + '/';
  args = _.compactObject(args);
  var data = querystring.stringify(args);
  this._request('post', path, data, callback, args);
}
为什么req.on('error'未捕获此错误


节点版本:0.10.21

您缺少响应的错误处理程序

res.on('error', function errorHandler(err) { console.log(err); });

套接字挂起是指您尝试联系的服务器从未结束连接,而是发生超时,它会以“挂起”错误响应。您必须找出服务器未关闭连接的原因,或者如果请求时间过长,则必须延长超时限制。您正在调用
req.end(data)
在最后,您的变量被称为
req
,因此应该在请求开始之前就结束请求,因为请求是异步的,这似乎是一个错误,但没有足够的上下文来说明。您确定没有两次使用
req
变量名吗?此错误可能发生在我试图联系的服务器暂时关闭。因此,我正在发送一个基本的get请求,当数据进入时,我会处理它。有时,我连接的服务器会关闭,但这对我来说并不重要,因为我会随时重试。我只是试图阻止抛出错误。有没有办法捕获超时错误?没有,我没有不使用req变量两次。此外,此脚本可以正常运行24小时以上,然后出现此错误。好吧,这似乎有点奇怪,因为您在异步方法的回调中返回了
数据
,然后在最后输出了
数据
,但此时不应该有任何
数据
,因为这很简单为了避免错误,您可以将整个函数粘贴在try/catch块中,或者(最好)使用node.js捕捉错误。