验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Express框架两个内置中间件方法怎么使用

阅读:519 来源:乙速云 作者:代码code

Express框架两个内置中间件方法怎么使用

      什么是中间件

      中间件,就是具有串联执行能力的函数,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 初始化都会注入此两个中间件。

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>