我正在尝试测试https连接。 正在执行“尝试”,但是未执行“捕获”未缓存错误并按需要执行代码。
我正在使用node.js
var https = require("https");
try {
https.get({host:'nonsecuredomain.com'}, function(res){});
}
catch(err) {
console.log('maybe an ssl error');
}
events.js:167 投掷者//未处理的“错误”事件 ^
Error: certificate has expired
at TLSSocket.onConnectSecure (_tls_wrap.js:1049:34)
at TLSSocket.emit (events.js:182:13)
at TLSSocket._finishInit (_tls_wrap.js:631:8)
Emitted 'error' event at:
at TLSSocket.socketErrorListener (_http_client.js:392:9)
at TLSSocket.emit (events.js:182:13)
at emitErrorNT (internal/streams/destroy.js:82:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
答案 0 :(得分:3)
https.get
是异步的。这意味着在网络返回结果或错误时,具有try
catch
的函数将已经返回。
get
返回一个对象,该对象将在发生错误时发出事件。您应该侦听该“错误”事件并处理在那里异步引发的错误:
https.get(url, (res) => {
res.on('data', (d) => {
// do stuff
});
}).on('error', (e) => {
console.error(e); // deal with errors
});
答案 1 :(得分:1)
正如塔布拉所说,该错误发生在另一个线程上,您无法在原始线程上捕获它。
通常,异步函数返回一个promise,您可以通过以下方式处理它: asyncFunc()。catch(err => console.error(错误消息))
但是在这种情况下,异步函数返回一个事件,因此您需要以这种方式处理
https.get({host:'foo.bar'}, function onSuccess(res){
res.on('error', (e) => {
console.error(`Got error: ${e.message}`)
})
}).on('error', (e) => {
console.error(`Got error: ${e.message}`)
});