egg(11,12)--中间件进阶-router.js中使用中间件egg中使用Koa中间件

一.项目准备

https://github.com/1134506391...

egg(11,12)--中间件进阶-router.js中使用中间件egg中使用Koa中间件_第1张图片

配置nunjucks

npm i egg-view-nunjucks --save
config/plugin.js
'use strict';
exports.nunjucks = {
  enable: true,
  package: 'egg-view-nunjucks',
};
config.congif.default.js
  //配置html模板
  config.view = {
    defaultViewEngine: 'nunjucks',
    mapping: {
      '.tpl': 'nunjucks',
    },
  };

二. 定义一个中间件在应用中使用中间件

middleware/auth.js
module.exports = (options, app) => {
    return async function WebAuthentication(ctx, next) {
        console.log(options);  //config.default.js中定义的参数
        console.log(new Date());
        await next();
    };
};
config.congif.default.js
  config.middleware = ['auth'];;
  config.auth = {
    atr:'this is attr'
  }

效果演示

刷新页面
egg(11,12)--中间件进阶-router.js中使用中间件egg中使用Koa中间件_第2张图片

三.在 router.js 路由中使用中间件

指定某个路由要走某一个中间件,可以不在congif.default.js中配置middleware

router.js
module.exports = app => {
  const { router, controller } = app;
  const auth = app.middleware.auth({ attr: 'this is aa' });
  // const auth = app.middleware.auth({});
  router.get('/', auth, controller.home.index);
  router.get('/news', controller.news.index);
  router.get('/shop', controller.shop.index);
};

请求http://localhost:7001

clipboard.png
请求http://localhost:7001/news

clipboard.png

四. 框架默认中间件的配置

  // 配置表单提交的最大限制
  config.bodyParser = {
    jsonLimit: '10mb', // Default is 1mb.
  };

五.Egg.js 中使用 koa 件 的中间件 的 (规范的 Koa 的中间件

koa-compress

egg(11,12)--中间件进阶-router.js中使用中间件egg中使用Koa中间件_第3张图片

cnpm install koa-compress --save
middleware/compress.js
module.exports = require('koa-compress');
config.default.js
  config.compress = {
    threshold: 300,
  };

六.Egg.js 中使用 koa 件 的中间件 的 (非规范的 Koa 中间件

config/config.default.js
module.exports = {
    webpack: {
        compiler: {},
        others: {},
    },
};
app/middleware/webpack.js
const webpackMiddleware = require('some-koa-middleware');
module.exports = (options, app) => {
return webpackMiddleware(options.compiler, options.others);
}

七.Egg.js 中间件的通用配置

无论是应用层加载的中间件还是框架自带中间件,都支持几个通用的配置项:

  1. enable:控制中间件是否开启。
  2. match:设置只有符合某些规则的请求才会经过这个中间件。
  3. ignore:设置符合某些规则的请求不经过这个中间件
  4. match,ignore不能同时存在

enable

config/config.default.js
enable: true,或者false
  config.middleware = [ 'auth', 'compress' ];
  config.auth = {
    enable: true,
    atr: 'this is attr',
  };

egg(11,12)--中间件进阶-router.js中使用中间件egg中使用Koa中间件_第4张图片

match,ignore

  config.auth = {
    enable: true,
    // match: '/news',
    ignore: '/news',
    atr: 'this is attr',
  };

match()方法,匹配多个路由

config.default.js
  config.auth = {
    match(ctx) {
      console.log(ctx.request.url);
      if (ctx.request.url === '/news' || ctx.request.url === '/shop') {
        return true;
      }
      return false;
    },
    title: 'this i s auth match',
  };

访问/

clipboard.png
访问/news或者/shop

clipboard.png

你可能感兴趣的:(egg(11,12)--中间件进阶-router.js中使用中间件egg中使用Koa中间件)