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

Mar*_*tin 3 javascript ssl node.js

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

tls.connect(port, host, options, function(){
    // on connected
})
Run Code Online (Sandbox Code Playgroud)

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

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

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

log*_*yth 5

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

为了更清楚:

tls.connect(port, host, options, function(){
  // on connected
});
Run Code Online (Sandbox Code Playgroud)

这是短暂的:

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

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

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