Express框架兩個(gè)內(nèi)置中間件方法詳解
什么是中間件
中間件,就是具有串聯(lián)執(zhí)行能力的函數(shù),Express中兩種層面的中間件。app 層面的中間件, router 層面的中甲件。在 express 中, 一般通過(guò) use 方法和路由的方法添加中間件。
兩個(gè)內(nèi)置的中間件
- init 中間件方法
- query 中間件方法
init 方法
exports.init = function(app){
return function expressInit(req, res, next){
if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');
req.res = res;
res.req = req;
req.next = next;
setPrototypeOf(req, app.request)
setPrototypeOf(res, app.response)
res.locals = res.locals || Object.create(null);
next();
};
};
expressInit 中間件:
- 設(shè)置 'X-Powered-By' 請(qǐng)求頭
- req/res 對(duì)象上添加屬性
- 綁定原型
- 設(shè)置 local
- 調(diào)用 next 方法
query 中間件
module.exports = function query(options) {
var opts = merge({}, options)
var queryparse = qs.parse;
if (typeof options === 'function') {
queryparse = options;
opts = undefined;
}
if (opts !== undefined && opts.allowPrototypes === undefined) {
// back-compat for qs module
opts.allowPrototypes = true;
}
return function query(req, res, next){
if (!req.query) {
var val = parseUrl(req).query;
req.query = queryparse(val, opts);
}
next();
};
};
返回一個(gè) query 函數(shù),在 query 函數(shù)中使用 parseUrl 和 queryparse 處理了 url 中 query, 到此就惡意直接在 req 中使用 query 了。
exports.query = require('./middleware/query');
query 中間件被輸出了,可以手動(dòng)調(diào)用。
被使用
app.lazyrouter = function lazyrouter() {
if (!this._router) {
this._router = new Router({
caseSensitive: this.enabled('case sensitive routing'),
strict: this.enabled('strict routing')
});
this._router.use(query(this.get('query parser fn')));
this._router.use(middleware.init(this));
}
};
在調(diào)用 lazyrouter 函數(shù)的地方,都會(huì)使用 use 函數(shù)添加中間件函數(shù)。每一個(gè) app 初始化都會(huì)注入此兩個(gè)中間件。
小結(jié)
本文介紹了中間件的簡(jiǎn)單定義,具有串聯(lián)的特性,以及 Express 中兩個(gè)內(nèi)置中間件,一個(gè)是 exprss 初始中間件,一個(gè)時(shí) express 的 query 中間件。內(nèi)置 query 中間件被輸出可別外部使用,同時(shí)在 app.lazyrouter 中被初始化。
更多關(guān)于Express框架內(nèi)置中間件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Three.js概述和基礎(chǔ)知識(shí)學(xué)習(xí)
這篇文章主要為大家介紹了Three.js概述和基礎(chǔ)知識(shí)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
js解決移動(dòng)端滾動(dòng)穿透問(wèn)題方案詳解
這篇文章主要為大家介紹了js解決移動(dòng)端滾動(dòng)穿透問(wèn)題方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
微信小程序 picker 組件詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了微信小程序 picker 組件詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-01-01
Javascript設(shè)計(jì)模式之原型模式詳細(xì)
這篇文章主要介紹了Javascript設(shè)計(jì)模式之原型模式,原型模式用于在創(chuàng)建對(duì)象時(shí),通過(guò)共享某個(gè)對(duì)象原型的屬性和方法,從而達(dá)到提高性能、降低內(nèi)存占用、代碼復(fù)用的效果。下面小編將詳細(xì)介紹 ,需要的朋友可以參考下2021-09-09
AntDesignPro使用electron構(gòu)建桌面應(yīng)用示例詳解
這篇文章主要為大家介紹了AntDesignPro使用electron構(gòu)建桌面應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
微信小程序 生命周期和頁(yè)面的生命周期詳細(xì)介紹
這篇文章主要介紹了微信小程序 生命周期和頁(yè)面的生命周期詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-01-01
JSON字符串轉(zhuǎn)換JSONObject和JSONArray的方法
這篇文章主要介紹了JSON字符串轉(zhuǎn)換JSONObject和JSONArray的方法的相關(guān)資料,需要的朋友可以參考下2016-06-06
jQuery幻燈片插件owlcarousel參數(shù)說(shuō)明中文文檔
jQuery幻燈片插件owlcarousel是一個(gè)小巧強(qiáng)大兼容性強(qiáng)的幻燈片插件,兼容IE6以上所有瀏覽器,本文主要介紹了字的使用方法與中文參數(shù)與API說(shuō)明2018-02-02

