前端需知nodejs?express中間件使用及定義詳解
引言
在上一節(jié)中我們簡單了解了express的路由,本文主要分析下express的另一個核心功能中間件的使用。路由是express整個框架能有如今廣泛使用和發(fā)展的基礎(chǔ),那中間件就是其發(fā)展的養(yǎng)分。正是express豐富的中間件才節(jié)省了我們大量的開發(fā)時間。
中間件的定義
對于express來說,中間件其實就是一個規(guī)定了入?yún)⒑统鰠⒌腏avaScript函數(shù),這個函數(shù)可以處理請求request和返回response相關(guān)的參數(shù),其功能如下:
- 執(zhí)行任何代碼。
- 處理請求和返回對象并返回新的。
- 結(jié)束本次請求。
- 調(diào)用next函數(shù)執(zhí)行下一個中間件。 定義中間件的示例如下:
//處理請求對象的:請求參數(shù)重插入個參數(shù)
const myMiddleware = function (req, res, next) {
console.log('this is a middleware')
req.requestTime = Date.now()
next()
}
可配置的中間件,目前這種中間件在我們實際應(yīng)用中比較多,比如經(jīng)典expressJWT bodyParser中間件
module.exports = function (options) {
return function (req, res, next) {
// 根據(jù)傳入的參數(shù)執(zhí)行一些操作
next()
}
}
中間件的使用
- 中間件注冊:使用app.use或app.METHOD進(jìn)行中間件注冊。
- 中間按使用類型可以分為以下幾種:
- 常規(guī)型:應(yīng)用層中間件、路由層中間件、內(nèi)置中間件、第三方中間件
- 錯誤處理:錯誤處理中間件

- 中間件整個執(zhí)行流程圖大概如上圖:注冊中間件和路由=》生成路由與中間件的映射=》客戶端請求=》執(zhí)行應(yīng)用層中間件=》匹配路由=》執(zhí)行異常中間件或路由映射的中間件,內(nèi)置中間件和第三方中間件的執(zhí)行流程根據(jù)其所定義的位置來執(zhí)行。
- 應(yīng)用層中間件:使用
app.use()和app.METHOD()函數(shù)將應(yīng)用層中間件綁定到應(yīng)用程序?qū)ο蟮膶嵗话銓懺趹?yīng)用最前面
var app = express();
app.use(function (req, res, next) {
******
next();
});
- 路由器層中間件:路由層中間件和應(yīng)用層類似,主要差別是路由中間件綁定的是express.Router()上。在復(fù)雜的項目中拆分路由時候常用
let express = require('express');
let router = express.Router();
router.post('/download/**/', function (req, res, next) {
******
});
- 內(nèi)置中間件:自 V4.x 起,Express 不再依賴于 Connect。除
express.static外,先前 Express 隨附的所有中間件函數(shù)現(xiàn)在以單獨(dú)模塊的形式提供。請查看中間件函數(shù)的列表。
const express = require('express');
const app = express();
app.use(express.urlencoded({extended: false}));
- 第三方中間件:這一種中間件是我們使用最多的中間件,用于增加和擴(kuò)展路由器的功能。使用一般是npm install安裝=》引入=》使用。如下:morgan是一個開源的express日志處理中間件
const morgan = require('morgan')
app.use(morgan('short'));
- 錯誤處理中間件:此種中間件和其他幾種的最大不同是函數(shù)中采用了四個變量,第一個變量是錯誤信息的返回。在項目的最后我們經(jīng)常會加上如下缺省錯誤處理,用于捕獲程序異常:
app.use((err, req, res, next) => {
if (res.headersSent) {
return next(err);
}
res.status(500);
res.render('error', { error: err });
});
總結(jié)
express中間件的思想不緊緊方便了開發(fā),這種設(shè)計也是我們系統(tǒng)高內(nèi)聚低耦合多思想實踐之一。在我們?nèi)粘5臉I(yè)務(wù)開發(fā)中也可以參照這種設(shè)計來實現(xiàn)需求。
以上就是前端需知nodejs express中間件使用及定義詳解的詳細(xì)內(nèi)容,更多關(guān)于前端nodejs express中間件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何在NestJS中添加對Stripe的WebHook驗證詳解
這篇文章主要為大家介紹了如何在NestJS中添加對Stripe的WebHook驗證詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
nodejs的HTML分析利器node-jquery用法淺析
這篇文章主要介紹了nodejs的HTML分析利器node-jquery用法,簡單分析了node-jquery的功能并結(jié)合實例說明了node-jquery控制臺輸出信息的操作技巧,需要的朋友可以參考下2016-11-11
nodejs使用express創(chuàng)建一個簡單web應(yīng)用
這篇文章主要介紹了nodejs使用express創(chuàng)建一個簡單web應(yīng)用的相關(guān)資料,需要的朋友可以參考下2017-03-03
node版本下報錯build: `vue-cli-service build`問題及解決
這篇文章主要介紹了node版本下報錯build: `vue-cli-service build`問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01
基于node搭建服務(wù)器,寫接口,調(diào)接口,跨域的實例
今天小編就為大家分享一篇基于node搭建服務(wù)器,寫接口,調(diào)接口,跨域的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05

