{"id":13487504,"url":"https://github.com/zzzs/egg-router-group","last_synced_at":"2025-03-27T22:31:22.645Z","repository":{"id":57220714,"uuid":"145630760","full_name":"zzzs/egg-router-group","owner":"zzzs","description":"have the ability to route group operations for eggjs (使eggjs具有路由群组操作的能力)","archived":false,"fork":false,"pushed_at":"2019-07-13T21:04:55.000Z","size":97,"stargazers_count":33,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-10T22:38:32.906Z","etag":null,"topics":["egg","egg-router","egg-router-group","node"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zzzs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-21T23:35:07.000Z","updated_at":"2023-09-04T03:18:20.000Z","dependencies_parsed_at":"2022-08-29T04:01:39.269Z","dependency_job_id":null,"html_url":"https://github.com/zzzs/egg-router-group","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zzzs%2Fegg-router-group","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zzzs%2Fegg-router-group/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zzzs%2Fegg-router-group/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zzzs%2Fegg-router-group/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zzzs","download_url":"https://codeload.github.com/zzzs/egg-router-group/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245935484,"owners_count":20696640,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["egg","egg-router","egg-router-group","node"],"created_at":"2024-07-31T18:01:00.121Z","updated_at":"2025-03-27T22:31:22.367Z","avatar_url":"https://github.com/zzzs.png","language":"JavaScript","funding_links":[],"categories":["仓库","Plugins"],"sub_categories":["插件"],"readme":"# egg-router-group\n\n[![NPM version][npm-image]][npm-url]\n[![build status][travis-image]][travis-url]\n[![Test coverage][codecov-image]][codecov-url]\n[![David deps][david-image]][david-url]\n[![Known Vulnerabilities][snyk-image]][snyk-url]\n[![npm download][download-image]][download-url]\n\n[npm-image]: https://img.shields.io/npm/v/egg-router-group.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/egg-router-group\n[travis-image]: https://img.shields.io/travis/zzzs/egg-router-group.svg?style=flat-square\n[travis-url]: https://travis-ci.org/zzzs/egg-router-group\n[codecov-image]: https://img.shields.io/codecov/c/github/zzzs/egg-router-group.svg?style=flat-square\n[codecov-url]: https://codecov.io/github/zzzs/egg-router-group?branch=master\n[david-image]: https://img.shields.io/david/zzzs/egg-router-group.svg?style=flat-square\n[david-url]: https://david-dm.org/zzzs/egg-router-group\n[snyk-image]: https://snyk.io/test/github/zzzs/egg-router-group/badge.svg?targetFile=package.json\n[snyk-url]: https://snyk.io/test/github/zzzs/egg-router-group?targetFile=package.json\n[download-image]: https://img.shields.io/npm/dm/egg-router-group.svg?style=flat-square\n[download-url]: https://npmjs.org/package/egg-router-group\n\nhave the ability to route group operations for eggjs.\n\n赋予eggjs路由群组操作的能力。\n\n\n## Install\n\n```bash\n$ npm i egg-router-group --save\n```\n\n## Mount\n\n```js\n// {app_root}/config/plugin.js\nexports.routerGroup = {\n  enable: true,\n  package: 'egg-router-group',\n};\n```\n\n## Features\n\u003e 为 app.router 注入了路由群组 group(options, cb) 方法, options: 路由群组公用属性, cb: 路由回调。\n\n路由群组允许你共用路由属性，例如：路由别名前缀，路由url前缀，中间件等，你可以利用路由群组统一为多个路由设置共同属性，而不需在每个路由上都设置一次。共用属性被指定为对象格式，当作 app.router.group 方法的第一个参数，具体路由群组的相关内容，可参考下面几个常用样例来熟悉这些特性。\n\n**目前支持这三种属性**\n\n  * 路由别名前缀: name\n  * 路由url前缀: prefix\n  * 中间件: middlewares\n\n## Usage\n\n### 基本用法\n\n```js\n// {app_root}/app/router.js\nmodule.exports = app =\u003e {\n  const { router, controller, middleware } = app;\n  const m1 = middleware.m1();\n  const m2 = middleware.m2({ key: 'value' });\n  const m3 = middleware.m3();\n\n  router.group({ name: 'home::', prefix: '/pre', middlewares: [ m1, m2 ] }, router =\u003e {\n    // router-path: /pre/test, middlewares: m1, m2\n    // router-path: /pre/test2, middlewares: m1, m2\n    router.get('/test', controller.home.test).get('/test2', controller.home.test);\n    // router-name: home::post, router-path: /pre/post, middlewares: m1, m2, m3\n    router.post('post', '/post', m3, controller.home.post);\n\n    // others\n    router.all('/test', controller.home.all1);\n    router.all('testname', '/test2', controller.home.all2);\n    router.put('/put', controller.home.put);\n    router.delete('/delete', controller.home.delete);\n    router.del('/del', controller.home.del);\n    router.options('/options', controller.home.options);\n    router.patch('/patch', controller.home.patch);\n    router.redirect('/redirect', '/');\n    router.redirect('/redirect2', 'home::testname', 302);\n  });\n\n  // 设置单个属性\n  router.group({ name: 'home::' }, router =\u003e {\n    // router-path: /test\n    router.get('/test', controller.home.test);\n    // router-name: home::post, router-path: /post\n    router.post('post', '/post', controller.home.post);\n  });\n\n  // group 同样支持链式操作\n  router.group({ name: 'home::', prefix: '/pre', middlewares: [ m1, m2 ] }, router =\u003e {\n    // router-path: /pre/test, middlewares: m1, m2\n    // router-path: /pre/test2, middlewares: m1, m2 ⚠️这里🈶️group 设置的属性哦\n    router.get('/test', controller.home.test).get('/test2', controller.home.test);\n  })\n    .get('/test3', controller.home.test); // router-path: /test3 ⚠️这里🈚group 设置的属性哦\n};\n```\n\n### 中间件\n\n\u003e 支持传单个中间件或数组的形式\n\n```js\n// {app_root}/app/router.js\nmodule.exports = app =\u003e {\n  const { router, controller, middleware } = app;\n  const m1 = middleware.m1();\n  const m2 = middleware.m2({ key: 'value' });\n\n  router.group({ middlewares: [ m1, m2 ] }, router =\u003e {\n    router.get('/test_m1', controller.home.test_m1);\n    router.post('/test_m2/:id', controller.home.test_m2);\n  });\n  router.group({ middlewares: m1 }, router =\u003e {\n    router.get('/test_m3', controller.home.test_m3);\n    router.post('/test_m4/:id', controller.home.test_m4);\n  });\n};\n```\n\n### 路由别名前缀 \u0026 路由url前缀\n\u003e 路由别名前缀 \u0026 路由url前缀 只支持string类型\n\n```js\n// {app_root}/app/router.js\nmodule.exports = app =\u003e {\n  // name\n  router.group({ name: 'home::' }, router =\u003e {\n    // router-name: home::post\n    router.post('post', '/test/:id', controller.home.t1);\n  });\n\n  // prefix\n  router.group({ prefix: '/pre' }, router =\u003e {\n    // router-name: test, router-path: /pre/test2\n    router.get('test', '/test2', controller.home.t2);\n  });\n};\n```\n\n### Advanced Usage\n\u003e 路由子群组，顾名思义，即路由群组内也可以使用路由群组功能，很适用于大型项目，当路由到达一定量级时，也能轻松维护管理。如果你想的话，路由群组可以一直嵌套下去。\n\n\n**注：如果出现设置重复的中间件，该中间件也会被执行多次，这部分自由度还是会开放给用户，不做特殊处理。**\n\n```js\n\n  // {app_root}/app/router.js\n  router.group({ name: 'home1::', prefix: '/pre1', middlewares: m1 }, router =\u003e {\n    // router-name: home1::name_g1, router-path: /pre1/test_g1, middlewares: m1, m2\n    router.get('name_g1', '/test_g1', m2, controller.group.g1);\n\n    router.group({ prefix: '/pre2', middlewares: m2 }, router =\u003e {\n      // router-path: /pre1/pre2/test_g3, middlewares: m1, m2, m2\n      router.get('/test_g3', m2, controller.group.g1);\n\n      // router-path: /pre1/pre2/test_g4/:id, middlewares: m1, m2\n      // router-path: /pre1/pre2/test_g4_1/:id, middlewares: m1, m2\n      router.post('/test_g4/:id', controller.group.g2).get('/test_g4_1', controller.group.g2);\n\n      router.group({ name: 'home2::' }, router =\u003e {\n        // router-name: home1::home2::name_g6, router-path: /pre1/pre2/test_g6/:id, middlewares: m1, m2\n        router.post('name_g6', '/test_g6/:id', controller.group.g2);\n        // ...\n      });\n    })\n      .get('/test_g2_1', controller.group.g1); // router-path: /pre1/test_g2_1, middlewares: m1\n  });\n```\n\n## Questions \u0026 Suggestions\n\nPlease open an issue [here](https://github.com/zzzs/egg-router-group/issues).\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzzzs%2Fegg-router-group","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzzzs%2Fegg-router-group","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzzzs%2Fegg-router-group/lists"}