Node.js中的錯誤處理

在執行Node.js應用程序期間如何處理錯誤

Node.js中的錯誤通過異常處理。

創建例外

使用創建異常throw關鍵詞:

throw value

JavaScript執行此行後,正常程序流程將立即停止,並將控件退回到最近的位置異常處理程序

通常在客戶端代碼中value可以是任何JavaScript值,包括字符串,數字或對象。

在Node.js中,我們不拋出字符串,而僅拋出Error對象。

錯誤對象

錯誤對像是對象,可以是Error對象的實例,也可以擴展Error類,錯誤核心模塊

throw new Error('Ran out of coffee')

或者

class NotEnoughCoffeeError extends Error {
  //...
}
throw new NotEnoughCoffeeError

處理異常

異常處理程序是try/catch陳述。

包含在代碼行中的任何異常try塊在相應的地方處理catch堵塞:

try {
  //lines of code
} catch (e) {

}

e在這個例子中是異常值。

您可以添加多個處理程序,它們可以捕獲各種錯誤。

捕獲未捕獲的異常

如果在程序執行過程中引發了未捕獲的異常,則程序將崩潰。

要解決此問題,請聽uncaughtException上的事件process目的:

process.on('uncaughtException', (err) => {
    console.error('There was an uncaught error', err)
    process.exit(1) //mandatory (as per the Node docs)
})

您不需要導入process核心模塊,因為它是自動注入的。

承諾的例外

使用promise可以鏈接不同的操作,並在最後處理錯誤:

doSomething1()
  .then(doSomething2())
  .then(doSomething3())
  .catch(err => console.error(err))

您怎麼知道錯誤發生在哪裡?您並不是很清楚,但是您可以處理所調用的每個函數中的錯誤(doSomethingX),然後在錯誤處理程序中拋出一個新錯誤,這將在外部調用catch處理程序:

const doSomething1 = () => {
  //...
  try {
    //...
  } catch (err) {
    //... handle it locally
    throw new Error(err.message)
  }
  //...
}

為了能夠在本地處理錯誤而不在我們調用的函數中處理錯誤,我們可以打破鏈條,可以在每個函數中創建一個函數then()並處理異常:

doSomething1
  .then((() => {
    return doSomething2().catch(err => {
      //handle error
      throw err //break the chain!
    })
  })
  .then((() => {
    return doSomething2().catch(err => {
      //handle error
      throw err //break the chain!
    })
  })
  .catch(err => console.error(err))

使用異步/等待處理錯誤

使用異步/等待,您仍然需要捕獲錯誤,並且您可以通過以下方式進行操作:

async function someFunction() {
  try {
    await someOtherFunction()
  }
  catch (err) {
    console.error(err.message)
  }
}

免費下載我的Node.js手冊


更多節點教程: