Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

eggjs中间件+定时任务

中间件

  • 所处环节

    • 用户 -> 中间件 -> 路由 -> 控制器 -> 服务
  • app目录内

    • 新建middleware中间件文件夹
    • 打开后,在里面新建check.js,添加内容为:
      module.exports = options => {
          return async function check(ctx,next){
              console.log("检查");
      
              //记得要让中间件顺利通过,进入路由处理
              await next();
          }
      }
      
      //参数options会传递变量app.config[${middlewareName}]
      
  • 注册中间件 的 两种办法

    • 【应用层注册】

      • 打开config/config.default.js
      • 添加内容为:
        config.middleware = ['check']
        
      • 会挂载到 app.config.appMiddleware
      • 框架默认的挂载在 app.config.coreMiddleware
      • 二者会合并到 app.middleware
    • 【单个路由注册】

      • 打开app/router.js
      • 添加内容为:
        const check = app.middleware.check()
        router.get("内部使用的别名可省略","要匹配的路径",check,"控制器方法路径")
        
      • 可以连续写多个,逗号隔开,按书写顺序一一经过中间件,注意名字不能与默认中间件同名
  • 可引入Koa的中间件

定时任务

  • app目录内

    • 新建schedule定时任务文件夹,
    • 打开后,在里面新建wantdo.js,添加内容为:
      module.exports = {
          schedule:{
              interval: 2000, //单位毫秒
              type: 'all' //所有worker都要执行
          },
          async task(ctx){
              console.log('定时任务执行')
          }
      }
      
      • 一个文件只能定义一个task,执行一个任务
  • 执行日志会输出到

    ${appInfo.root}/logs/{app_name}/egg-schedule.log
    
    • 默认不会输出到控制台
  • 可以手动执行

    app.runSchedule("定时任务文件名")