前端需知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)在以單獨模塊的形式提供。請查看中間件函數(shù)的列表。
const express = require('express'); const app = express(); app.use(express.urlencoded({extended: false}));
- 第三方中間件:這一種中間件是我們使用最多的中間件,用于增加和擴展路由器的功能。使用一般是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)文章
基于html5和nodejs相結(jié)合實現(xiàn)websocket即使通訊
HTML5 擁有許多引人注目的新特性,如 Canvas、本地存儲、多媒體編程接口、WebSocket 等等。雖然現(xiàn)在大家把它捧的很火的樣子,但是個人認(rèn)為它還需要其他平臺的支持才能真正的"火起來"2015-11-11在nodeJs中如何修改json文件中的數(shù)據(jù)
這篇文章主要介紹了在nodeJs中如何修改json文件中的數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10node.js 和HTML5開發(fā)本地桌面應(yīng)用程序
這篇文章主要介紹了node.js 和HTML5開發(fā)本地桌面應(yīng)用程序的相關(guān)資料,需要的朋友可以參考下2016-12-12nodejs中內(nèi)置模塊fs,path常見的用法說明
這篇文章主要介紹了nodejs中內(nèi)置模塊fs,path常見的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11關(guān)于node+mysql數(shù)據(jù)庫連接池連接
這篇文章主要介紹了關(guān)于node+mysql數(shù)據(jù)庫連接池連接,mysql有兩種連接方式:一種是直接連接 另一種是池化連接,我們這篇講的是池化連接,需要的朋友可以參考下2023-04-04node.js中的querystring.unescape方法使用說明
這篇文章主要介紹了node.js中的querystring.unescape方法使用說明,本文介紹了querystring.unescape的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下2014-12-12koa2 數(shù)據(jù)api中間件設(shè)計模型的實現(xiàn)方法
這篇文章主要介紹了koa2 數(shù)據(jù)api中間件設(shè)計模型的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07