我在寫一個與REST API交談的模塊,由於REST API提供了很好的語義錯誤響應(例如403與503),我想將這些語義錯誤傳達給調用者。在Node.js中公開和編寫錯誤的最佳方式是什麼?
(編輯:我的意思是,調用者應該能夠以編程方式理解錯誤的原因,並採取相應的行動,如顯示相應的UI)
什麼是我做的最好辦法所以?
爲這些語義創建我自己的
Error
子類,例如,mymodule.ForbiddenError
,mymodule.ServiceUnavailableError
?呼叫者然後將檢查instanceof
來派生語義。這在靜態類型語言(如C#和Java)中最爲典型。添加例如
mymoduleCode
屬性到標準Error
實例,其語義字符串如'Forbidden'
或'ServiceUnavailable'
。 Node.js本身就是這樣做的,例如code: 'ECONNREFUSED'
。還有其他的一些方法嗎?
==
現在我正在寫另一個模塊,封裝了第一個模塊。我不想直接暴露內部模塊的錯誤,但爲了可調試性,編寫/包裝它們會很好。
對我來說,最好的辦法是什麼?
添加例如,一個
internalError
屬性給我的Error
實例,該實例引用了內部模塊的Error
實例。 C#和Java再次做到這一點。 (Exception#InnerException/Throwable#cause)還有其他的方法嗎?
我見過的大多數工具,不過,只顯示Error
實例stack
屬性,因此這個數據會迷失在這種情況下。有沒有一種典型的/傳統的方式已經存在?
node-verror很好,但有一個問題是致命的IMO - 嘗試打印空值/未定義字符串時崩潰。你可以試試這個解決這個問題的分支:https://github.com/naddison36/node-verror – Michael
有沒有人知道這裏的「推動錯誤契約」在#2中是什麼意思? – fraxture
我假設它是指設置'name','message'和'stack'(通過'Error.captureStackTrace')。 –