Node.js Error簡介以及捕獲方式

error的類型

nodejs 的error 一般分爲四種類型:

1、標準的 JavaScript 錯誤,例如 EvalError、SyntaxError、RangeError、ReferenceError、TypeError 或 URIErro。
2、由底層操作系觸發的系統錯誤,例如試圖打開不存在的文件、或試圖使用已關閉的 socket 發送數據。
3、由應用程序代碼觸發的用戶自定義的錯誤。
4、AssertionError 錯誤,當 Node.js 檢測到不應該發生的異常邏輯時觸發。這類錯誤通常來自 assert 模塊。

 

error的捕獲

nodejs有3種當應用程序發生錯誤時的捕獲方式

1、try…catch

一般用於處理代碼中可能出現的錯誤信息,當錯誤發生時, JavaScript 會停止執行,並生成一個錯誤信息。使用 throw 語句 來創建自定義消息(拋出異常)。如果你將 throw 和 try 、 catch一起使用,就可以控制程序輸出的錯誤信息。若異常用try…catch 處理,則nodejs進程會立即退出。

// 拋出一個 ReferenceError,因爲 z 未定義。
try {
  const m = 1;
  const n = m + z;
} catch (err) {
  // 在這裏處理錯誤。
}

但需要注意的是,如果想在異步方法的回調函數裏面拋出錯誤,不要放在 try … catch 代碼塊中,因爲代碼執行順序的原因, 回調函數還沒有執行, try…catch 代碼已經執行完畢並退出.

try {
     setTimeout(function () {
     // 拋出一個異常錯誤,這是因爲異步函數執行上下文不同,所以捕獲不到。
        throw new Error('setTimeout error');
    }, 1000);
} catch (err) {
    console.log(err);
}

2、回調函數中的error參數

大多數 Node.js 核心 API 所提供的異步方法都遵從錯誤信息優先的回調模式慣例,這種模式有時也稱爲 Node.js 式回調。在這種模式中,一個回調函數首先被作爲參數傳給異步方法。當該方法完成操作或產生錯誤時,它會調用回調函數,並將可能存在的 Error 對象作爲第一個參數傳給回調函數。如果沒有錯誤產生,那麼第一個參數爲 null 。

const fs = require('fs');

fs.readFile('/f1', (err, data) => {
    if(err) {
        console.error('出錯', err);
        return;
    }
    console.log(data);
});

3、process.on(‘uncaughtException’)事件監聽

當系統發生異常,且沒有被try…catch捕獲時;會出發‘uncaughtException’事件;該方法適用於全局的異常捕獲,來避免nodejs進程的崩潰,但該方法僅僅用於異常捕獲,無法做成相應的異常處理,因爲無法定位到發生異常的上下文。

process.on('uncaughtException', (err) => {
  console.log(err);
});

setTimeout(() => {
  console.log('這裏仍然會運行');
}, 500);

// 故意引起異常,但不要捕獲它。
errorFunc();
console.log('這裏不會運行');

結語:異常錯誤是程序中無法避免的,但重要的是我們如何在發生錯誤的時候如何處理錯誤,來保證程序的順利執行。

 

在這裏插入圖片描述
睿江雲官網鏈接:https://www.eflycloud.com/home?from=RJ0036

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章