有人可以解释一下nodejs中的错误代码是什么(不是状态代码)

vis*_*ddy 1 javascript error-handling node.js mean-stack nodejs-stream

这个问题我在面试中遇到过很多次,但我仍然找不到答案。我已经用谷歌搜索过,但没有找到确切的答案。请任何人告诉我这个问题的确切答案。

问题:NodeJs 中的错误代码是什么?

我回答了错误状态代码。但面试官说,我不是问状态码。请解释答案。先感谢您。

小智 7

您面临这个问题是因为错误代码是在 8 之前的节点 8.x 中引入的,错误类中存在错误消息,这导致了非常基本的问题,因为开发人员被迫为错误创建自定义类。请参阅https://nodejs.org/docs/latest-v7.x/api/errors.html#errors_class_error

\n\n

后来在 Node 8 中,Node.js API 抛出的所有错误对象在 Node 8.x 中引入了错误代码\n https://nodejs.org/api/errors.html#errors_class_error

\n\n

节点错误代码: \n https://nodejs.org/dist/latest/docs/api/errors.html#errors_node_js_error_codes

\n\n

为什么应该使用错误代码?

\n\n

直到 Node7,Node.js 抛出的大多数错误只有一条与之相关的消息。如果您想让代码根据错误采取特定操作,则必须将消息字符串与已知值进行比较。结果可能是这样的:

\n\n
try {\n// Do something\n}\ncatch(error) {\n    if (error.message == \'a simpe error\'){\n        // do something\n    }\n    else {\n        // do something\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这不是一个好的做法,因为在大多数情况下,当您从 Node.js 收到错误时,您的代码更有可能只是记录/显示消息,然后分支到公共恢复路径。

\n\n

现在您可能已经注意到上面示例中使用的消息比较中有一个拼写错误。好吧,Node.js 代码库也可能发生这种情况,或者节点有可能重新定义消息字符串。

\n\n

对消息字符串的硬依赖也给国际化带来了挑战。

\n\n

这应该允许将前面的示例重写如下:

\n\n
try {\n    // Do something\n}\ncatch(error) {\n    if (error.code == \'A_ERROR_CODE\'){\n        // do something\n    }\n    else {\n        // do something\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用上述做法将确保将来如果/当消息发生变化时,代码不会受到影响,因为错误代码保持不变。

\n