自定义路由

使用插件机制可以很方便的设置自定义路由,并指定resful path的访问深度

需求

定义前缀为/docs的5层访问uri, /docs/cat/subcat/level/sublevel/id

  • cat: 分类
  • subcat: 子类
  • level: 首层
  • sublevel: 子层
  • id: 文章id

插件放在哪里

所有插件均被放置在server/plugins目录中,aotoo-hub会在node端服务启动之前遍历server/plugins目录,加载所有插件到KOA的运行时

workspace/src
  │    
  └── server 
       │
       └── plugins 
             └──docs
                 └──index.js

设置自定义路由

定义一个路由前缀/docs,并允许resful5层访问

 // server/plugins/docs/index.js  

export default function(fkp, opts){

  // '/docs'为需要访问的路由前缀
  // 访问 http://www.aaa.com/docs/aaa/bbb,得到变量 cat='aaa', subcat='bbb'
  fkp.routepreset('/docs', {

    // 定义GET路由访问深度,支持5层resful深度
    get: [
      '/',
      '/:cat',
      '/:cat/:subcat',
      '/:cat/:subcat/:level',
      '/:cat/:subcat/:level/:sublevel',
      '/:cat/:subcat/:level/:sublevel/:id'
    ],


    // 定义POST路由深度 
    post: [
      '/:cat', 
      '/:cat/:subcat', 
      '/:cat/:subcat/:level'
      '/:cat/:subcat/:level/:sublevel',
      '/:cat/:subcat/:level/:sublevel/:id'
    ],

    // 自定义路由control处理方法
    customControl: function(ctx, next){

      // 获取路由路径变量
      const {cat, subcat, level, sublevel, id} = ctx.params

      // 设置自定义路由输出
      ctx.body = 'some html string'
    }
  })
}