> NodeJS的错误处理让人痛苦,在很长的一段时间里,大量的错误被放任不管。但是要想建立一个健壮的Node.js程序就必须正确的处理这些错误,而且这并不难学。如果你实在没有耐心,那就直接绕过长篇大论跳到“总结”部分吧。
[原文](https://www.joyent.com/developers/node/design/errors)
这篇文章会回答NodeJS初学者的若干问题:
* 我写的函数里什么时候该抛出异常,什么时候该传给callback, 什么时候触发`EventEmitter`等等。
* 我的函数对参数该做出怎样的假设?我应该检查更加具体的约束么?例如参数是否非空,是否大于零,是不是看起来像个IP地址,等等等。
* 我该如何处理那些不符合预期的参数?我是应该抛出一个异常,还是把错误传递给一个callback。
* 我该怎么在程序里区分不同的异常(比如“请求错误”和“服务不可用”)?
* 我怎么才能提供足够的信息让调用者知晓错误细节。
* 我该怎么处理未预料的出错?我是应该用 `try/catch` ,`domains` 还是其它什么方式呢?
这篇文章可以划分成互相为基础的几个部分:
* **背景**:希望你所具备的知识。
* **操作失败和程序员的失误**:介绍两种基本的异常。
* **编写新函数的实践**:关于怎么让函数产生有用报错的基本原则。
* **编写新函数的具体推荐**:编写能产生有用报错的、健壮的函数需要的一个检查列表
* **例子**:以`connect`函数为例的文档和序言。
* **总结**:全文至此的观点总结。
* **附录:Error对象属性约定**:用标准方式提供一个属性列表,以提供更多信息。