Express框架之中間件

◆ 中間件的作用:

中間件就是一堆方法,主要由中間件方法以及請求處理函數組成。可以接收客戶端發來的請求、可以對請求做出響應,也可以將請求繼續交給下一個中間件繼續處理。

app.get('請求路徑', '處理函數')   // 接收並處理get請求
app.post('請求路徑', '處理函數')  // 接收並處理post請求

在這裏插入圖片描述

◆ next方法

可以針對同一個請求設置多箇中間件,對同一個請求進行多次處理。默認情況下,請求從上到下依次匹配中間件,一旦匹配成功,終止匹配。調用next方法將請求的控制權交給下一個中間件,直到遇到結束請求的中間件。

app.get('/request', (req, res, next) => {
    req.name = "張三";
    next();
});
app.get('/request', (req, res) => {
    res.send(req.name);
});
◆ app.use中間件:

app.use 匹配所有的請求方式,可以直接傳入請求處理函數,代表接收所有的請求

app.use((req, res, next) => {
     console.log(req.url);
     next();
 });

app.use 第一個參數也可以傳入請求地址,代表不論什麼請求方式,只要是這個請求地址就接收這個請求。

app.use('/admin', (req, res, next) => {
    console.log(req.url);
    next();
});
◆ 錯誤處理中間件:

在程序執行的過程中,不可避免的會出現一些無法預料的錯誤,比如文件讀取失敗,數據庫連接失敗。

錯誤處理中間件是一個集中處理錯誤的地方。當程序出現錯誤時,調用next()方法,並且將錯誤信息通過參數的形式傳遞給next()方法,即可觸發錯誤處理中間件。

// 引入express框架
const express = require('express');
const fs = require('fs');
// 創建網站服務器
const app = express();

app.get('/index', (req, res, next) => {
	// throw new Error('程序發生了未知錯誤')
	fs.readFile('./01.js', 'utf8', (err, result) => {
		if (err != null) {
			next(err)
		}else {
			res.send(result)
		}
	})

	// res.send('程序正常執行')
})

// 錯誤處理中間
app.use((err, req, res, next) => {
	res.status(500).send(err.message);
})

// 監聽端口
app.listen(3000);
console.log('網站服務器啓動成功');
◆ 捕獲錯誤:

try catch可以捕獲異步函數以及其他同步代碼在執行過程中發生的錯誤,但是不能其他類型的API發生的錯誤。

// 引入express框架
const express = require('express');
const fs = require('fs');
const promisify = require('util').promisify;
const readFile = promisify(fs.readFile);
// 創建網站服務器
const app = express();

app.get('/index', async (req, res, next) => {
	try {
		await readFile('./aaa.js')
	}catch (ex) {
		next(ex);
	}
})

// 錯誤處理中間
app.use((err, req, res, next) => {
	res.status(500).send(err.message);
})

// 監聽端口
app.listen(3000);
console.log('網站服務器啓動成功');
發佈了293 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章