国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Express.js】全局錯(cuò)誤處理

這篇具有很好參考價(jià)值的文章主要介紹了【Express.js】全局錯(cuò)誤處理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

全局錯(cuò)誤處理

在前面幾節(jié)里,我們處理異常的方法都是手動(dòng)在可能引發(fā)異常的地方捕捉錯(cuò)誤,這固然是必要的,可以有針對(duì)性得處理異常,但很多時(shí)候,有許多潛在的異常,有一句話叫永遠(yuǎn)不要相信輸入的數(shù)據(jù),你永遠(yuǎn)都不知道什么時(shí)候可能會(huì)以什么方式觸發(fā)某些陰間異常從而造成系統(tǒng)崩潰。因此,我們需要有一位好幫手能幫助我們捕獲各種錯(cuò)誤

而這位好幫手就是,異常處理中間件

自定義異常處理中間件

同步異常

異常處理中間件需要傳入4個(gè)參數(shù): err,req,res和next,這樣才會(huì)被express識(shí)別為異常處理中間件
創(chuàng)建一個(gè)exhandler,并掛載到服務(wù)器上:
注意: 掛載異常處理中間件的行為必須位于所有定義的接口之下,至于理由,會(huì)在下一節(jié)《中間件》中給出解答

let exhandler = (err, req, res, next)=> {
    console.error('Error:', err.message);
    res.status(500).json(err);
}
app.use(exhandler);

我們?cè)趆elloWorld接口中人為拋出一個(gè)異常試一下,可以直接throw,也可以傳遞給next(事實(shí)上,意外的異常發(fā)生時(shí),會(huì)被express捕獲并傳遞給next,然后再丟給我們的異常處理中間件)

app.get('/', (req, res, next)=> {
    const err = new Error();
    err.name = '無(wú)法訪問(wèn)';
    err.message = '對(duì)不起,網(wǎng)站正在維護(hù)中';
    // next(err);
    throw err;
});

測(cè)試

使用api調(diào)試工具GET 127.0.0.1:8080/,我們的程序不會(huì)崩潰,并且你將得到被封裝好的錯(cuò)誤信息,并且響應(yīng)碼是500。

{
    "name": "無(wú)法訪問(wèn)",
    "message": "對(duì)不起,網(wǎng)站正在維護(hù)中"
}

異步異常

上面的異常是產(chǎn)生在串行的代碼中的,那如果在異步操作中產(chǎn)生了異常呢?
我們弄一個(gè)異步異常的接口試一下:

app.post('/', async (req, res, next)=> {
    res.send(await error()).end();
});

function error() {
    let err = new Error('網(wǎng)站維護(hù)');
    err.message = "自定義的錯(cuò)誤";
    return Promise.reject(err);
}

POST 127.0.0.1:8080/,程序報(bào)錯(cuò),之前的中間件并未捕獲到這個(gè)錯(cuò)誤。

可以手動(dòng)在處理函數(shù)內(nèi)加上 try-catch 語(yǔ)句塊,但這樣比較繁瑣,一個(gè)更方便的方法是使用 express-async-errors:

npm i express-async-errors

然后引入即可:

require('express-async-errors');

POST 127.0.0.1:8080/,這次成功捕獲到了異步錯(cuò)誤!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-495749.html

下一節(jié)-中間件

到了這里,關(guān)于【Express.js】全局錯(cuò)誤處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 遇到:internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module ‘express‘ 錯(cuò)誤應(yīng)該如何解決

    遇到 \\\"internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module \\\'express\\\'\\\" 錯(cuò)誤通常表示在你的代碼中無(wú)法找到所需的 express 模塊。以下是一些可能的解決方法: 確保 express 模塊已經(jīng)正確安裝:在終端或命令行中,進(jìn)入你的項(xiàng)目目錄,運(yùn)行 npm install express 命令來(lái)安裝 express 模塊。

    2024年02月05日
    瀏覽(114)
  • Vue.js常見(jiàn)錯(cuò)誤處理包含代碼

    語(yǔ)法錯(cuò)誤 錯(cuò)誤信息: Error: [vm] \\\"name\\\" is not defined 解決方法:確保組件的 data 中定義了相同的屬性。 示例代碼: 類型錯(cuò)誤 錯(cuò)誤信息: Error: [vm] \\\"name\\\" is not a function 解決方法:確保組件的 data 中定義的是一個(gè)函數(shù)。 示例代碼: 模板語(yǔ)法錯(cuò)誤 錯(cuò)誤信息: Error: [vm] \\\"message\\\" is not d

    2024年02月14日
    瀏覽(21)
  • Node.js 應(yīng)用的御用品: Node.js 錯(cuò)誤處理系統(tǒng)

    Node.js 應(yīng)用的御用品: Node.js 錯(cuò)誤處理系統(tǒng)

    開(kāi)發(fā)中,有些開(kāi)發(fā)者會(huì)積極尋求處理錯(cuò)誤,力求減少開(kāi)發(fā)時(shí)間,但也有些人完全忽略了錯(cuò)誤的存在。正確處理錯(cuò)誤不僅意味著能夠輕松發(fā)現(xiàn)和糾正錯(cuò)誤,而且還意味著能夠?yàn)榇笮蛻?yīng)用程序開(kāi)發(fā)出穩(wěn)健的代碼庫(kù)。 特別是對(duì)于 Node.js 開(kāi)發(fā)人員,他們有時(shí)會(huì)也發(fā)現(xiàn)自己使用了不那么

    2024年02月10日
    瀏覽(37)
  • 【Express.js】express-validator

    express.js 集成 express-validator進(jìn)行數(shù)據(jù)校驗(yàn) 在最初的時(shí)候,對(duì)于請(qǐng)求的數(shù)據(jù)校驗(yàn),我們是自定義一個(gè)中間件,然后在里面通過(guò)最原生的方式檢驗(yàn)。在本節(jié),我們將嘗試用一種更優(yōu)雅的方式進(jìn)行數(shù)據(jù)校驗(yàn)。 創(chuàng)建一個(gè)基礎(chǔ)的 express 項(xiàng)目(本文基于evp-express-cli),并支持全局同步和異

    2024年02月13日
    瀏覽(26)
  • 【Express.js】請(qǐng)求類型

    本節(jié)將介紹常見(jiàn)的http請(qǐng)求方式,并站在后端的角度初步感受它們的不同點(diǎn) GET 意圖是 獲取 ,不會(huì)對(duì)服務(wù)器上的數(shù)據(jù)產(chǎn)生影響,將要攜帶的數(shù)據(jù)放在 URL 上,通常不帶請(qǐng)求體,帶了也不一定兼容 POST 意圖是 提交 ,通常用于修改和新增服務(wù)器上的數(shù)據(jù),偏向 新增 ,路徑定位較

    2024年02月09日
    瀏覽(24)
  • 【Express.js】頁(yè)面渲染

    常見(jiàn)的頁(yè)面分為兩種,一種是靜態(tài)頁(yè)面,比如用 Vue、React 等寫好的靜態(tài)頁(yè)面,另一種是動(dòng)態(tài)模板頁(yè)面,如 Thymeleaf,JSP 等。 本節(jié)將簡(jiǎn)要介紹如何在 express 中渲染靜態(tài)頁(yè)面,以及適用于 express 的模板引擎 pug 。 寫前端的和搞部署的同學(xué)應(yīng)該都清除,頁(yè)面渲染的用到的 css, js, f

    2024年02月13日
    瀏覽(38)
  • Express.js認(rèn)識(shí)

    ? ? ?Express 是?Node.js 老框架,以簡(jiǎn)單和輕量著稱,幾行代碼就可以啟動(dòng)一個(gè) HTTP 服務(wù)器。 市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都與 Express 息息相關(guān)。 Express 框架使用標(biāo)準(zhǔn) Node.js 語(yǔ)法,主要由以下 3 個(gè)核心部分組成: 路由。 中間件。 錯(cuò)誤處理。 ? ? ?Express? 基本結(jié)

    2024年02月21日
    瀏覽(18)
  • 【Express.js】集成RabbitMQ

    本節(jié)我們介紹在 express.js 中集成 rabbitmq. RabbitMQ 是一個(gè)消息隊(duì)列中間件,常用于請(qǐng)求削峰,事務(wù)的隊(duì)列處理,事件訂閱機(jī)制的實(shí)現(xiàn)等。 創(chuàng)建一個(gè) express.js 項(xiàng)目(本文基于evp-express-cli) 在開(kāi)發(fā)環(huán)境下安裝rabbitmq 安裝amqplib.js: 正常的項(xiàng)目都是分層的,為了避免循環(huán)依賴,本文采用

    2024年02月13日
    瀏覽(24)
  • 【Express.js】軟件測(cè)試

    本節(jié)介紹如何在 express.js 使用 Jest 進(jìn)行單元測(cè)試 準(zhǔn)備一個(gè)基礎(chǔ)的 express 項(xiàng)目,本文基于 evp-express-cli 安裝 Jest 生成 Jest 配置 創(chuàng)建測(cè)試文件,以 .test.js 后綴命名,Jest 在運(yùn)行期間會(huì)自動(dòng)查找并執(zhí)行符合 *.test.js 命名的文件,為規(guī)范起見(jiàn),新建一個(gè) test 目錄,存放所有的測(cè)試文件

    2024年02月13日
    瀏覽(23)
  • 【Express.js】集成SocketIO

    本節(jié)我們介紹在如何在 express 中集成 Socket.IO Socket.IO 算是 WebSocket 的一個(gè)超集,進(jìn)行了一些封裝和拓展。 創(chuàng)建一個(gè) express.js 項(xiàng)目(本文基于evp-express-cli) 安裝socket.io.js: 正常的項(xiàng)目都是分層的,為了避免循環(huán)依賴,本文采用代理類構(gòu)造單例的方式來(lái)創(chuàng)建websocket服務(wù)器。 wsPro

    2024年02月13日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包