首頁  >  文章  >  web前端  >  Node.js下自訂錯誤類型的解析

Node.js下自訂錯誤類型的解析

不言
不言原創
2018-06-30 14:40:402379瀏覽

這篇文章給大家詳細介紹如何在Node.js下自訂錯誤類型,對大家學習或使用Node.js具有一定的參考借鑒價值,有需要的朋友們可以參考借鑒,下面來一起看看吧。

前言

一般來說,很少人會考慮如何處理應用產生的錯誤的策略,在調試的過程中,簡單地利用console.log('error')定位錯誤,基本上夠用了,透過留下這些調試信息,能夠為我們以後的調試過程中升了不少時間,提高了維護性。所以錯誤提示非常重要。同時,也會帶來一些比較糟糕用法。最近的專案裡就用到了自訂錯誤類型,覺得有必要深入了解一下,所以就寫了這篇文章,方便自己和有需要的大家在需要的時候查閱。

Subclassing Error

#首先我們可以定義一個 Error 的子類別。透過Object.create util.inherits 很容易實現:

var assert = require('assert');
var util = require('util');

function NotFound(msg){
 Error.call(this);
 this.message = msg;
}
util.inherits(NotFound, Error);
var error = new NotFound('not found');
assert(error.message);
assert(error instanceof NotFound);
assert(error instanceof Error);
assert.equal(error instanceof RangeError, false);

##可以透過

instanceof 來檢查錯誤類型,依照類型進行不同的處理。

上面的程式碼設定了自帶的

message,並且error NotFound Error 的一個實例,但不是RangeError

如果用了

express 框架, 就能設定其他的 properties error 變得更有用。

比方說當處理一個HTTP的錯誤時,就可以寫成這樣:

function NotFound(msg) {
 Error.call(this);
 this.message = msg;
 this.statusCode = 404;
}

現在就已經可以透過錯誤處理的中間件來處理錯誤訊息:

app.use(function(err, req, res, next) {
 console.error(err.stack);

 if (!err.statusCode || err.statusCode === 500) {
 emails.error({ err: err, req: req });
 }

 res.send(err.statusCode || 500, err.message);
});

這會傳送HTTP的狀態碼給瀏覽器,當

err statusCode 未設定或等於500 的時候, 就透過郵件來傳送這個錯誤。這樣就能排除那些 404, 401, 403等的錯誤。

讀取

console.error(err.stack) 事實上並不會像預期那樣工作,像node, chrome 基於V8 的可以使用Error.captureStackTrace(this, arguments.callee) 的錯誤建構子來進行堆疊追蹤。

var NotFound = function(msg) {
 Error.call(this);
 Error.captureStackTrace(this, arguments.callee);
 this.message = msg || 'Not Found';
 this.statusCode = 404;
 this.name = "notFound"
}
util.inherits(NotFound, Error);

export.NotFoundError = NotFound;

當然我們也可以將上面這個建立的抽象錯誤類型擴展到其他自訂錯誤:

var notFountError = require('./error').NotFountError; 
var UserNotFound = function(msg){
 this.constructor.super_(msg);
}

util.inherits(UserNotFound, notFoundError);

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

nodejs中模組定義的介紹

#nodejs實作bigpipe非同步載入頁面的方法

關於node.js基於fs模組對系統檔案及目錄進行讀寫操作的方法

以上是Node.js下自訂錯誤類型的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn