middleware 中间件更适合处理请求,
plugins 插件可以处理独立的业务逻辑
egg plugins规范
- egg插件以 egg-开头,例如 egg-auth,egg-login
- plugins插件是独立性的应用,插件相当于一个微应用
- 例如,用户登录鉴权,就是一个插件,因为这是个独立的业务
- 插件不包括 router.js 和 controller控制器,为什么?
- 如果插件包含路由,极有可能和主项目的router,或 controller冲突
插件和中间件的区别
- 中间件
- 中间件是在请求到来的时候,在处理路由之前,执行的逻辑
- middleware中间件更适合处理请求,在路由和服务的中间
- 例如,校验权限,就用中间件
- 插件,是扩展了 eggjs的功能
- egg插件包含 middleware
plugins插件
plugins插件都放在 src/app/lib/plugins目录下
/lib/plugin/egg-auth/app
egg插件开发 egg-socket
https://blog.csdn.net/taokexia/article/details/105724252
coreMiddleware
如果插件是 extend,不是 middleware,就不用再 app.js里面 push
- middleware中间件,需要 push到 app.config.coreMiddleware
- extend
- coreMiddleware 是个数组
src/app.js
'use strict';
module.exports = app => {
// 将 session保存到内存中
const store = {};
app.sessionStore = {
async get(key) {
return store[key];
},
async set(key, value, maxAge) {
store[key] = value;
store.maxAge = maxAge;
},
async destroy(key) {
store[key] = null;
},
};
// 将 plugin插件放入数组中
const { coreMiddleware } = app.config;
const plugins = [
// 'auth',
];
app.config.coreMiddleware = [
...coreMiddleware,
...plugins,
];
// app.config.coreMiddleware.push('auth');
};