前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Egg 中间件使用详解

Egg 中间件使用详解

作者头像
越陌度阡
发布2020-11-26 10:39:42
1.8K0
发布2020-11-26 10:39:42
举报

1. 自定义中间件全局配置

1. 在 middleware 文件夹中定义中间件文件,如 auth.js,并实现自定义的功能。

代码语言:javascript
复制
module.exports = (option, app) => {
    return async function auth(ctx, next) {
        // 获取配置所传的参数
        console.log(option);
        // 实现中间件的功能
        console.log(new Date());
        await next();
    }
}

2. 在 config 文件夹中的config.default.js中配置中间件。

代码语言:javascript
复制
'use strict';

module.exports = appInfo => {
    const config = exports = {};
    config.keys = appInfo.name + '_1532511512428_3477';

    // 配置全局中间件
    config.middleware = ['auth'];
    // 给配置的中间件传参
    config.auth = {
        title: 'this is auth'
    };
    
    config.view = {
        mapping: {
            '.html': 'ejs',
        },
    };
    return config;
};

以上的中间件属于全局配置,不能有针对性的对每个路由实现单独配置。

2. 对指定路由使用中间件

1. 在 middleware 文件夹中定义中间件文件,如 auth.js,并实现自定义的功能。

代码语言:javascript
复制
module.exports = (option, app) => {
    return async function auth(ctx, next) {
        // 获取配置所传的参数
        console.log(option);
        // 实现中间件的功能
        console.log(new Date());
        await next();
    }
}

2. 在 router.js 中对指定的路由使用中间件。

代码语言:javascript
复制
'use strict';

module.exports = app => {
    const { router, controller } = app;
    // 路由中获取中间件并传参
    var auth = app.middleware.auth({ title: 'this is router.js  middleware' })
    // 第二个参数传入中间件,即为使用中间件
    router.get('/', auth, controller.home.index);
    router.get('/news', auth, controller.news.index);
    // 不使用中间件
    router.get('/shop', controller.shop.index);
};

3. 对框架自带的中间件进行配置

Egg 框架集成了bodyParser中间件,用于接收POST请求获取数据,而默认的接收数据大小为1MB,可以修改这个选项。

代码语言:javascript
复制
'use strict';

module.exports = appInfo => {
    const config = exports = {};
    config.keys = appInfo.name + '_1532511512428_3477';

    // 配置框架自带的中间件
    config.bodyParser = {
        // 默认1MB
        jsonLimit: '10mb'
    }

    return config;
};

4. 在 Egg 中使用Koa 的标准中间件

Egg 框架本身自带了一部分的中间件,然而有些情况下,需要实现一些特殊的功能,就需要使用一些Koa的中间件,毕竟Koa的生态圈要强大一些,在Egg中可以很方便的集成Koa的中间件。

以 koa-compress 为例,开启服务器 Gzip 压缩功能,在 Koa中的使用方法如下:

代码语言:javascript
复制
const koa = require('koa'); 
const compress = require('koa-compress'); 
const app = koa(); 
const options = { threshold: 2048 }; 
app.use(compress(options));

在Egg中使用方法如下:

1. 安装koa-compress中间件。

代码语言:javascript
复制
cnpm  install koa-compress --save

2. 在middleware文件夹下面新建中间件文件compress.js,在文件中引入koa-compress并导出。

代码语言:javascript
复制
module.exports=require('koa-compress');

3. 在config文件夹中的config.default.js中配置中间件。

代码语言:javascript
复制
'use strict';

module.exports = appInfo => {
    const config = exports = {};
    // use for cookie sign key, should change to your own and keep security
    config.keys = appInfo.name + '_1532511512428_3477';
    // 配置中间件
    config.middleware = ['compress'];
    config.compress = {
        // 设置传输数据大于多少时才进行压缩
        threshold: 1024 
    };
    return config;
};

5. 在 Egg 中使用Koa 的非标准中间件

非标准的koa中间件在使用时一般都要传入两个参数,在Egg中使用方式如下:

1. 安装中间件。

代码语言:javascript
复制
cnpm  install koa-example --save

2. 在middleware文件夹下面新建中间件文件example.js,在文件中引入koa-example并导出。

代码语言:javascript
复制
const Example = require('koa-example');
module.exports=(option,app)=>{
    // 传入参数
    return Example(ptions.compiler, options.others);
}

3. 在config文件夹中的config.default.js中配置中间件。

代码语言:javascript
复制
module.exports = { 
    // 给中间件传参
    Example: { 
        compiler: {}, 
        others: {}, 
    }, 
};

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

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

1. enable:控制中间件是否开启。

2. match:设置只有符合某些规则的请求才使用这个中间件。

3. ignore:设置符合某些规则的请求不使用这个中间件。

代码语言:javascript
复制
// config/config.default.js
'use strict';

module.exports = appInfo => {
    const config = exports = {};
    config.keys = appInfo.name + '_1532511512428_3477';

    // 为middleware下的auth.js中间件进行全局配置
    config.auth = {
        // 是否启用中间件
        enable:true, 

        // 路由为/news才使用中间件
        match: '/news',

        // 路由为/news不使用中间件
        // ignore:'/news',

        title: 'this is  middleware'
    };
    return config;
};

match 与 ignore 意思相反,不能同时使用,当匹配规则比较多的时候,可以用一个函数来实现。

代码语言:javascript
复制
// config/config.default.js
'use strict';

module.exports = appInfo => {
    const config = exports = {};
    config.keys = appInfo.name + '_1532511512428_3477';

    // 为middleware下的auth.js中间件进行全局配置
    config.auth = {
        // 是否启用中间件
        enable:true, 
        // 定义函数匹配规则
        match(ctx) {
            // ctx 上下文  可以获取请求的地址
            console.log(ctx.request.url);
            if (ctx.request.url == '/shop' || ctx.request.url == '/news') {
                return true;
            }
            return false;
        },
        title: 'this is  middleware'
    };
    return config;
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 自定义中间件全局配置
  • 2. 对指定路由使用中间件
  • 3. 对框架自带的中间件进行配置
  • 4. 在 Egg 中使用Koa 的标准中间件
  • 5. 在 Egg 中使用Koa 的非标准中间件
  • 6. Egg.js 中间件的通用配置
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档