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