egg.js中,约定一个中间件是一个放置在`app/middleware`目录下的单独文件,它需要导出module.exports,导出为一个普通的函数,接受两个参数:
`option`:中间件的配置,框架会将app.config[${middlewareName}]传递过来。
`app`:当前应用Application的实例子。
## 定义一个访问任何地址,都先打印日期的中间件
### 1.创建中间件
![](https://box.kancloud.cn/ee942f20102dc5e0b8da5c9eac23c573_966x618.png)
~~~
//middlewate/printdate.js
module.exports = (options,app)=>{
//返回一个异步的方法
return async function printDate(ctx,next){
console.log(new Date);
await next()
}
}
~~~
### 2.配置中间件
>[warning]Tip:文件名要和middleware的文件名一样
~~~
config/config.default.js中配置
module.exports = appInfo => {
// 增加配置中间件
config.middleware = ['printdate'];
}
~~~
![](https://box.kancloud.cn/6594b0a5f8ab1b629e94cae7427275e1_1055x695.png)
### 3.给中间件传递参数
~~~
config/config.default.js中配置
// 增加配置中间件
config.middleware = ['printdate'];
config.printdate={
params:"给中间件传递参数"
}
~~~
~~~
//middlewate/printdate.js
//在中间件中通过options接受
module.exports = (options,app)=>{
//返回一个异步的方法
return async function printDate(ctx,next){
console.log(new Date);
console.log(options)
//{ params: '给中间件传递参数' }
await next()
}
}
~~~