middleware 中间件更适合处理请求,
plugins 插件可以处理独立的业务逻辑


egg plugins规范

  1. egg插件以 egg-开头,例如 egg-auth,egg-login
  2. plugins插件是独立性的应用,插件相当于一个微应用
    1. 例如,用户登录鉴权,就是一个插件,因为这是个独立的业务
  3. 插件不包括 router.js 和 controller控制器,为什么?
    1. 如果插件包含路由,极有可能和主项目的router,或 controller冲突

插件和中间件的区别

  1. 中间件
    1. 中间件是在请求到来的时候,在处理路由之前,执行的逻辑
    2. middleware中间件更适合处理请求,在路由和服务的中间
    3. 例如,校验权限,就用中间件
  2. 插件,是扩展了 eggjs的功能
    1. egg插件包含 middleware

plugins插件

plugins插件都放在 src/app/lib/plugins目录下
/lib/plugin/egg-auth/app

egg插件开发 egg-socket
https://blog.csdn.net/taokexia/article/details/105724252
image.png

coreMiddleware

如果插件是 extend,不是 middleware,就不用再 app.js里面 push

  • middleware中间件,需要 push到 app.config.coreMiddleware
  • extend
  • coreMiddleware 是个数组

image.png
src/app.js

  1. 'use strict';
  2. module.exports = app => {
  3. // 将 session保存到内存中
  4. const store = {};
  5. app.sessionStore = {
  6. async get(key) {
  7. return store[key];
  8. },
  9. async set(key, value, maxAge) {
  10. store[key] = value;
  11. store.maxAge = maxAge;
  12. },
  13. async destroy(key) {
  14. store[key] = null;
  15. },
  16. };
  17. // 将 plugin插件放入数组中
  18. const { coreMiddleware } = app.config;
  19. const plugins = [
  20. // 'auth',
  21. ];
  22. app.config.coreMiddleware = [
  23. ...coreMiddleware,
  24. ...plugins,
  25. ];
  26. // app.config.coreMiddleware.push('auth');
  27. };

在框架和插件中使用中间件
image.png