2

我正在编写一个 Node.js 应用程序,并且在它的一个代码块内可能会引发各种异常(通过我调用的第 3 方代码)。现在我想对这些异常做出反应,因此我这样做:

try {
  // Call 3rd party code
} catch (e) {
  // Handle e
}

基本上,这很好用,但是......我在不同的异常之间有什么区别?

不幸的是,它们都具有Error构造函数,因此这不是可行的方法。我可能会使用该message属性,但这当然不是最好的方式(因为我依赖于消息永远不会改变的事实,即 - 恕我直言 - 比构造函数更改的可能性更大)。

有任何想法吗?

PS:具体来说 - 我需要在尝试执行tls.connect. 如何检测到这是 SSL 错误?

4

2 回答 2

2

大多数包含在 javascript 错误对象中的系统级错误都有一个code属性,errno您可以进行比较。该列表在 node.js 源代码中的 uv.h 中定义。这可能是您的第二选择,偏好是

  1. instanceof 尽可能
  2. code或者errno
  3. message

但事实是有时你只需要看看message。鉴于 javascript 的动态和松散类型以及异常通常在 node.js 中不会发挥重要作用的事实,在某些情况下检查消息是您能做的最好的事情。

于 2013-01-15T16:19:57.927 回答
0

我不建议在 Node 中使用 try/catch 结构,因为由于 Node 的异步特性,我认为它不会起作用(除非您使用的是基本的同步代码)。

假设您正在使用异步函数/包,您可能会更幸运地检查回调函数中的错误状态。

于 2013-01-15T20:31:00.630 回答