原文地址:https://zybuluo.com/plusman/note/114470
參考資料:
NodeJS 錯誤處理最佳實踐
Node.js下自定義錯誤類型
程序員的失誤不在錯誤處理范圍內,應該debug掉傲醉。
可預見錯誤的處理
可接受錯誤
使用callback,不會使程序崩潰,err 和 data 二者有其一個
'use strict'
function doSomething(callback){
if('錯誤發(fā)生')
return callback(new Error('error'));
callback(null,data);
}
調用函數參數漏填
程序員的人為Bug诱渤,直接拋出異常蚌铜,方便及時修正暂刘。
return throw new Error('參數不完整');
不可預見錯誤的處理
try/catch
try/catch 唯一常用的是在 JSON.parse 和類似驗證用戶輸入的地方。
自定義錯誤類型 (繼承Error)
結合 [MDN Error][4] 章節(jié)捂刺,補充了遺漏的 stack 信息谣拣,并添加code(錯誤碼)屬性,方法兼容瀏覽器和node族展,示例如下森缠。
'use strict'
/**
* 自定義錯誤類型,繼承來自Error對象
* @param {string} message 錯誤消息體
* @param {number} code 錯誤碼
*
* edit by plusmancn@gmail.com wechat@plusman
*/
function MyError(message,code) {
this.code = code || 1;
this.message = message || 'MyError';
this.stack = Error().stack;
}
MyError.prototype = Object.create(Error.prototype);
MyError.prototype.name = "MyError";
try{
throw new MyError('MyError',1001);
}catch(ex){
console.log(ex instanceof Error); //true
console.log(ex instanceof MyError); // true;
console.log(ex instanceof RangeError); // false
}
項目實際應用中仪缸,可以把所有錯誤定義放進一個 errorCode.json 文件贵涵,通過
new MyError(errorCode['1001'],1001);
進行錯誤拋出,錯誤定義的集中,有利于文檔的生成宾茂。
系統常見錯誤拋出
名稱 | 定義 |
---|---|
ENOENT | Error No Entity 所操作的對象不存在 |
ENOMEM | Error No Memory 內存不足 |
[4org/topic/52090bc944e76d216af25f6f
3: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error