【eggjs】路由去中心化插件【egg-direct】
github:https://github.com/lisniuse/egg-direct 昨天在写eggjs的时候发现路由太多了管理很不方便,晚上研究了一下egg-core,写出了这个eggjs 路由去中心化插件。 不需要ts的装饰器,思路比较奇特,直接在方法参数中进行配置并且支持子控制器、多层级控制器,不与默认路由配置文件冲突。
依赖的插件
- egg-core(一般不需要单独安装)
开启插件
// config/plugin.js
exports.direct = {
enable: true,
package: 'egg-direct',
};
使用场景
使用egg-direct插件,可以不需要装饰器也可以在控制器中定义路由配置。
在定义的方法的默认参数配置里定义一个router变量,例如:
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
async index(router = [
[ 'get', '/' ],
[ 'get', '/home' ],
]) {
this.ctx.body = 'hi, ' + this.app.plugins.direct.name;
}
}
module.exports = HomeController;
router 参数接收一个二维数组类型的值,子数组的第一个是router的方法名,对应调用router[method](..argv)
,后面的值表示调用参数(...argv)
,具体传入参数,可以查看官方文档router说明。
2 回复
我用的方法是动态加载,按特定的url结构,指定class和方法,不需要写路由
@pzzcn 有的时候你的一个方法需要响应多个http请求方法(get、post),还有可能接收多个路由规则;比如:foo 或者 /foo/bar 都指向同一个控制器的方法这种需求。