【eggjs】路由去中心化插件【egg-direct】
发布于 5 年前 作者 lisniuse 3213 次浏览 来自 分享

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 都指向同一个控制器的方法这种需求。

回到顶部