Node.js中的錯誤處理
如何在Node.js應用程式執行期間處理錯誤
Node.js中的錯誤通過異常處理。
建立異常
使用throw
關鍵字來建立異常:
1 | throw value |
JavaScript執行此行時,正常程式流程將中斷,控制權會返回到最近的異常處理器。
通常在用戶端程式碼中,value
可以是任何JavaScript值,包括字串、數字或對象。
在Node.js中,我們不會拋出字串,而是拋出錯誤對象。
錯誤對象
錯誤對象是Error對象的實例,或是擴展了Error類別的對象,這些類別提供在錯誤核心模組中。
1 | throw new Error('Ran out of coffee') |
或者
1 | class NotEnoughCoffeeError extends Error { |
處理異常
異常處理器是一個try
/catch
語句。
在try
區塊中的代碼行引發的任何異常都在相應的catch
區塊中進行處理:
1 | try { |
此示例中的e
是異常值。
您可以添加多個處理器,可以捕獲不同類型的錯誤。
捕獲未捕獲的異常
如果在執行程序期間拋出未捕獲的異常,程序將崩潰。
為了解決這個問題,你可以聽取process
對象上的uncaughtException
事件:
1 | process.on('uncaughtException', (err) => { |
您無需匯入process
核心模組,因為它會自動注入。
使用承諾處理異常
使用承諾,您可以鏈接不同的操作,並在結尾處理錯誤:
1 | doSomething1() |
您如何知道錯誤發生在哪裡?實際上,您並不知道,但您可以在調用的每個函數(doSomethingX
)中處理錯誤,在錯誤處理器內部拋出一個新錯誤,將調用外部的catch
處理器:
1 | const doSomething1 = () => { |
為了能夠在函數內部處理錯誤而不必在呼叫的函數中處理它們,您可以在每個then()
中創建一個函數,並處理異常:
1 | doSomething1 |
使用async/await處理錯誤
使用async/await,您仍然需要捕獲錯誤,並且可以這樣做:
1 | async function someFunction() { |
tags: [“error handling”, “Node.js”, “exceptions”]