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;
};