路由钩子

2018-11-30 06:40:34

路由钩子是什么

模块a-hook提供了路由钩子机制,可以在后端API路由 执行前执行后处理业务逻辑

定义路由钩子

在模块的meta中定义路由钩子

a-hook/backend/src/meta.js

module.exports = app => {
  const meta = {};
  if (app.meta.isTest) {
    Object.assign(meta, {
      hook: {
        before: [
          { path: '/a/base/auth/echo', route: 'test/hookTestBefore' },
        ],
        after: [
          { path: '/a/base/auth/echo', route: 'test/hookTestAfter' },
        ],
      },
    });
  }
  return meta;
};
名称 说明
before 执行前钩子
after 执行后钩子
path 需要钩的后端API路由
route 需要执行的后端API路由

定义钩子API路由

a-hook/backend/src/routes.js

{ method: 'post', path: 'test/hookTestBefore', controller: test, middlewares: 'test' },
{ method: 'post', path: 'test/hookTestAfter', controller: test, middlewares: 'test' },

添加钩子逻辑

modules/a-hook/backend/src/controller/test.js

module.exports = app => {
  class TestController extends app.Controller {

    async hookTestBefore() {
      console.log('hook:before', this.ctx.ctxCaller.route);
      this.ctx.success();
    }
    async hookTestAfter() {
      console.log('hook:after', this.ctx.ctxCaller.route);
      this.ctx.success();
    }

  }
  return TestController;
};


评论: