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