> NodeJS的錯誤處理讓人痛苦,在很長的一段時間里,大量的錯誤被放任不管。但是要想建立一個健壯的Node.js程序就必須正確的處理這些錯誤,而且這并不難學。如果你實在沒有耐心,那就直接繞過長篇大論跳到“總結”部分吧。
[原文](https://www.joyent.com/developers/node/design/errors)
這篇文章會回答NodeJS初學者的若干問題:
* 我寫的函數里什么時候該拋出異常,什么時候該傳給callback, 什么時候觸發`EventEmitter`等等。
* 我的函數對參數該做出怎樣的假設?我應該檢查更加具體的約束么?例如參數是否非空,是否大于零,是不是看起來像個IP地址,等等等。
* 我該如何處理那些不符合預期的參數?我是應該拋出一個異常,還是把錯誤傳遞給一個callback。
* 我該怎么在程序里區分不同的異常(比如“請求錯誤”和“服務不可用”)?
* 我怎么才能提供足夠的信息讓調用者知曉錯誤細節。
* 我該怎么處理未預料的出錯?我是應該用?`try/catch`?,`domains`?還是其它什么方式呢?
這篇文章可以劃分成互相為基礎的幾個部分:
* **背景**:希望你所具備的知識。
* **操作失敗和程序員的失誤**:介紹兩種基本的異常。
* **編寫新函數的實踐**:關于怎么讓函數產生有用報錯的基本原則。
* **編寫新函數的具體推薦**:編寫能產生有用報錯的、健壯的函數需要的一個檢查列表
* **例子**:以`connect`函數為例的文檔和序言。
* **總結**:全文至此的觀點總結。
* **附錄:Error對象屬性約定**:用標準方式提供一個屬性列表,以提供更多信息。