时间:2023-03-09来源:系统城装机大师作者:佚名
中间件,就是具有串联执行能力的函数,Express中两种层面的中间件。app 层面的中间件, router 层面的中甲件。在 express 中, 一般通过 use 方法和路由的方法添加中间件。
1 2 3 4 5 6 7 8 9 10 11 12 |
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 中间件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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(); }; }; |
返回一个 query 函数,在 query 函数中使用 parseUrl 和 queryparse 处理了 url 中 query, 到此就恶意直接在 req 中使用 query 了。
1 | exports.query = require( './middleware/query' ); |
query 中间件被输出了,可以手动调用。
1 2 3 4 5 6 7 8 9 10 |
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 )); } }; |
在调用 lazyrouter 函数的地方,都会使用 use 函数添加中间件函数。每一个 app 初始化都会注入此两个中间件。
本文介绍了中间件的简单定义,具有串联的特性,以及 Express 中两个内置中间件,一个是 exprss 初始中间件,一个时 express 的 query 中间件。内置 query 中间件被输出可别外部使用,同时在 app.lazyrouter 中被初始化。
2023-03-18
如何使用正则表达式保留部分内容的替换功能2023-03-18
gulp-font-spider实现中文字体包压缩实践2023-03-18
ChatGPT在前端领域的初步探索最近闲来无事,在自己的小程序里面集成了一个小视频的接口,但是由于小程序对于播放视频的限制,只能用来做一个demo刷视频了,没办法上线体验。小程序播放视频限制最多10个,超出可能...
2023-03-18
Vue.js、React和Angular对比 以下是Vue.js的代码示例: 以下是React的代码示例: 以下是Angular的代码示例:...
2023-03-18