国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Node.js下自定義錯(cuò)誤類型詳解

2019-11-20 08:43:58
字體:
供稿:網(wǎng)友

前言

一般來說,很少人會考慮如何處理應(yīng)用產(chǎn)生的錯(cuò)誤的策略,調(diào)試的過程中,簡單地利用console.log(‘error')定位錯(cuò)誤,基本夠用了,通過留下這些調(diào)試信息,能夠?yàn)槲覀円院蟮恼{(diào)試過程中升了不少時(shí)間,提高了維護(hù)性。所以錯(cuò)誤提示非常重要。同時(shí),也會帶來一些比較糟糕用法。最近的項(xiàng)目里就用到了自定義錯(cuò)誤類型,覺得有必要深入了解一下,所以就寫了這篇文章,方便自己和有需要的大家在需要的時(shí)候查閱。

Subclassing Error

首先我們可以定義一個(gè) Error 的子類。通過 Object.create util.inherits 很容易實(shí)現(xiàn):

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 來檢查錯(cuò)誤類型,根據(jù)類型進(jìn)行不同的處理。

上面的代碼設(shè)置了自帶的message, 并且 error NotFound Error 的一個(gè)實(shí)例, 但是不是 RangeError。

如果用了 express 框架, 就能設(shè)置其他的 properties error 變得更有用。

比方說當(dāng)處理一個(gè)HTTP的錯(cuò)誤時(shí), 就可以寫成這樣:

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

現(xiàn)在就已經(jīng)可以通過錯(cuò)誤處理的中間件來處理錯(cuò)誤信息:

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);});

這會發(fā)送HTTP的狀態(tài)碼給瀏覽器, 當(dāng) err statusCode 未設(shè)置或者等于 500 的時(shí)候, 就通過郵件來發(fā)送這個(gè)錯(cuò)誤。這樣就能排除那些 404, 401, 403等等的錯(cuò)誤。

讀取 console.error(err.stack) 事實(shí)上并不會像預(yù)期那樣工作,像 node, chrome 基于 V8 的可以使用 Error.captureStackTrace(this, arguments.callee) 的錯(cuò)誤構(gòu)造函數(shù)來進(jìn)行堆棧跟蹤。

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;

當(dāng)然我們還可以將上面這個(gè)創(chuàng)建的抽象錯(cuò)誤類型擴(kuò)展到其他自定義錯(cuò)誤中:

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

總結(jié)

以上就是Node.js下自定義錯(cuò)誤類型的全部內(nèi)容,希望本文的內(nèi)容對大家學(xué)習(xí)或者使用Node.js能有一定的幫助,如果有疑問大家可以留言交流。謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 海林市| 闽侯县| 理塘县| 习水县| 元江| 绥滨县| 望江县| 滁州市| 静宁县| 泸水县| 平果县| 鹤岗市| 谢通门县| 房产| 稻城县| 南和县| 石楼县| 石首市| 和田县| 镇巴县| 长宁区| 盐源县| 台安县| 洪雅县| 睢宁县| 云南省| 禹州市| 祁连县| 南安市| 邻水| 鄱阳县| 武隆县| 锦屏县| 贵溪市| 华容县| 永定县| 屯留县| 松阳县| 安龙县| 牟定县| 怀远县|