时间: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