Express框架两个内置中间件方法详解

2023-03-09,

这篇文章主要为大家介绍了Express框架两个内置中间件方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

目录
  • 什么是中间件
  • 两个内置的中间件
    • init 方法
    • query 中间件
  • 被使用
    • 小结

      什么是中间件

      中间件,就是具有串联执行能力的函数,Express中两种层面的中间件。app 层面的中间件, router 层面的中甲件。在 express 中, 一般通过 use 方法和路由的方法添加中间件。

      两个内置的中间件

      • 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 中间件:

      • 设置 'X-Powered-By' 请求头
      • req/res 对象上添加属性
      • 绑定原型
      • 设置 local
      • 调用 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();
        };
      };
      

      返回一个 query 函数,在 query 函数中使用 parseUrl 和 queryparse 处理了 url 中 query, 到此就恶意直接在 req 中使用 query 了。

      exports.query = require('./middleware/query');
      

      query 中间件被输出了,可以手动调用。

      被使用

      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 中被初始化。

      更多关于Express框架内置中间件的资料请关注北冥有鱼其它相关文章!

      《Express框架两个内置中间件方法详解.doc》

      下载本文的Word格式文档,以方便收藏与打印。