我正在编写一个Node.js应用程序,在其中一个代码块中可能抛出各种异常(通过我调用的第三方代码)。现在我想对这些例外作出反应,因此我做了:
try {
// Call 3rd party code
} catch (e) {
// Handle e
}
基本上,这种方法很好,但是...我如何区别不同的异常?
他们都不幸地以Error
作为构造函数,因此这不可行。我可以使用message
属性,但当然这不是最好的方式(因为我依赖于消息永远不会改变的事实,这是 - 恕我直言 - 比构造函数更改的可能性更大)。 / p>
有什么想法吗?
PS:具体来说 - 我需要在尝试tls.connect
时对SSL出错做出反应。如何检测到它是SSL错误?
答案 0 :(得分:2)
包含在javascript错误对象中的系统级错误的大多数错误都将具有code
属性,您可以与errno
进行比较。该列表定义为in uv.h in the node.js source code。这可能是你的第二选择,优先选择
code
或errno
message
但事实上有时你只需要看message
。鉴于javascript的动态和松散类型以及一般异常在node.js中不起作用的事实,有时会检查消息是你能做的最好的事情。
答案 1 :(得分:0)
我不建议在Node中使用try / catch结构,因为我不认为它会因Node的异步性质而起作用(除非你使用基本的同步代码)。
假设您正在使用异步函数/包,那么在回调函数中检查错误状态可能会更加幸运。