最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年10月17日 14:17:39   投稿:daisy  
在JavaScript里面,運(yùn)行過(guò)程中的錯(cuò)誤的類型總是被人忽略,這篇文章給大家詳細(xì)介紹了如何在Node.js下自定義錯(cuò)誤類型,對(duì)大家學(xué)習(xí)或者使用Node.js具有一定的參考借鑒價(jià)值,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。

前言

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

Subclassing Error

首先我們可以定義一個(gè) Error 的子類。通過(guò) 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);

可以通過(guò) instanceof 來(lái)檢查錯(cuò)誤類型,根據(jù)類型進(jìn)行不同的處理。

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

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

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

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

現(xiàn)在就已經(jīng)可以通過(guò)錯(cuò)誤處理的中間件來(lái)處理錯(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);
});

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

讀取 console.error(err.stack) 事實(shí)上并不會(huì)像預(yù)期那樣工作,像 node, chrome 基于 V8 的可以使用 Error.captureStackTrace(this, arguments.callee) 的錯(cuò)誤構(gòu)造函數(shù)來(lái)進(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ò)誤類型的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用Node.js能有一定的幫助,如果有疑問(wèn)大家可以留言交流。謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 基于node下的http小爬蟲(chóng)的示例代碼

    基于node下的http小爬蟲(chóng)的示例代碼

    本篇文章主要介紹了基于node下的http小爬蟲(chóng)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • node.js中的fs.lchmodSync方法使用說(shuō)明

    node.js中的fs.lchmodSync方法使用說(shuō)明

    這篇文章主要介紹了node.js中的fs.lchmodSync方法使用說(shuō)明,本文介紹了fs.lchmodSync的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js前后端交互實(shí)現(xiàn)用戶登陸的實(shí)踐

    Node.js前后端交互實(shí)現(xiàn)用戶登陸的實(shí)踐

    本文主要介紹了Node.js前后端交互實(shí)現(xiàn)用戶登陸的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Node.js操作redis實(shí)現(xiàn)添加查詢功能

    Node.js操作redis實(shí)現(xiàn)添加查詢功能

    Redis 是一個(gè)基于內(nèi)存的鍵(key)值(value)類型的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)容器,它既可以完全工作在內(nèi)存中,也可以持久化存儲(chǔ)。當(dāng) Redis 工作于持久化模式時(shí),可以將它當(dāng)作一個(gè)非關(guān)系型數(shù)據(jù)庫(kù)使用。
    2017-05-05
  • 從零學(xué)習(xí)node.js之express入門(mén)(六)

    從零學(xué)習(xí)node.js之express入門(mén)(六)

    相信大家都知道Express是一個(gè)簡(jiǎn)潔而靈活的 node.js Web應(yīng)用框架, 提供了一系列強(qiáng)大特性幫助你創(chuàng)建各種 Web 應(yīng)用,和豐富的 HTTP 工具。下面這篇文章主要介紹了node.js中express的入門(mén)知識(shí),需要的朋友可以參考下。
    2017-02-02
  • Node.js API詳解之 vm模塊用法實(shí)例分析

    Node.js API詳解之 vm模塊用法實(shí)例分析

    這篇文章主要介紹了Node.js API詳解之 vm模塊用法,結(jié)合實(shí)例形式分析了Node.js API中vm模塊基本功能、函數(shù)、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • node.js在Linux下執(zhí)行shell命令、.sh腳本的問(wèn)題

    node.js在Linux下執(zhí)行shell命令、.sh腳本的問(wèn)題

    很多時(shí)候需要多個(gè)命令來(lái)完成一項(xiàng)工作,而這個(gè)工作又常常是重復(fù)的,這個(gè)時(shí)候我們自然會(huì)想到將這些命令寫(xiě)成sh腳本,下次執(zhí)行下這個(gè)腳本一切就都搞定了,下面就是發(fā)布代碼的一個(gè)腳本示例
    2022-01-01
  • Node輸出日志的正確方法示例

    Node輸出日志的正確方法示例

    這篇文章主要為大家介紹了Node輸出日志的正確方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • node連接MySQL數(shù)據(jù)庫(kù)的3種方式總結(jié)

    node連接MySQL數(shù)據(jù)庫(kù)的3種方式總結(jié)

    現(xiàn)在前端基本上都會(huì)用一些NodeJs,想必也想自己寫(xiě)一些API或者個(gè)人博客的后臺(tái)系統(tǒng),這些就離不開(kāi)連接數(shù)據(jù)庫(kù)的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于node連接MySQL數(shù)據(jù)庫(kù)的3種方式,需要的朋友可以參考下
    2022-08-08
  • node.js中的emitter.emit方法使用說(shuō)明

    node.js中的emitter.emit方法使用說(shuō)明

    這篇文章主要介紹了node.js中的emitter.emit方法使用說(shuō)明,本文介紹了emitter.emit的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12

最新評(píng)論

西华县| 隆子县| 凤台县| 梨树县| 台东县| 塔城市| 临桂县| 黄大仙区| 邻水| 湖州市| 龙陵县| 维西| 揭东县| 阳泉市| 太原市| 旬邑县| 屏边| 巴里| 通道| 慈溪市| 环江| 米易县| 密山市| 湾仔区| 岐山县| 越西县| 大邑县| 望奎县| 三都| 邹平县| 沙雅县| 靖安县| 木兰县| 灵山县| 玉环县| 临沧市| 大冶市| 城固县| 河西区| 临沭县| 新竹市|