节点js TLS未连接错误连接失败?怎么抓?

时间:2014-01-16 15:59:09

标签: javascript node.js ssl

在我看来,没有办法捕获与节点tls失败的连接。

tls.connect(port, host, options, function(){
    // on connected
})

由于代码是异步的,我不能将其包装到try catch中。我似乎没有发现一个表示ECONNREFUSED条件失败的事件。 http://nodejs.org/api/tls.html#tls_tls_connect_options_callback

相反,这个过程只会崩溃并退出。虽然我能够用uncaughtException处理程序捕获它。但我无法找到从该处理程序的错误中恢复的方法。当程序到达时,甚至不知道哪个连接失败了。

那么我们如何捕获失败的连接?

2 个答案:

答案 0 :(得分:5)

tls.connect方法返回一个您应该绑定error处理程序的流对象。

更清楚:

tls.connect(port, host, options, function(){
  // on connected
});

是这个的缩写:

var stream = tls.connect(port, host, options);
stream.once('secureConnect', function(){
  // on connected
});

因此,您需要添加另一个处理程序来侦听错误而不是成功连接:

var stream = tls.connect(port, host, options);
stream.once('secureConnect', function(){
  // on connected
});
stream.on('error', function(err){
  // on error
});

答案 1 :(得分:0)

tls.connect()创建与指定porthost的新客户端连接。 tls.connect()返回tls.TLSSocket个对象。

您可以使用以下代码来处理错误。

var options = {
host: 'example.com',
port: 443
};

var socket = tls.connect(options, function() {
  // Connected
}); 
socket.on('error', function(err) {
  // on error
});

查找更多信息here