{"id":13799541,"url":"https://github.com/zaaack/koa-dec-router","last_synced_at":"2025-04-23T14:26:32.999Z","repository":{"id":74324789,"uuid":"86703792","full_name":"zaaack/koa-dec-router","owner":"zaaack","description":"An ES6 decorator + class based router, support inherit, override, priority, auto load controllers, etc.","archived":false,"fork":false,"pushed_at":"2018-01-19T10:29:40.000Z","size":212,"stargazers_count":21,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-30T00:31:36.615Z","etag":null,"topics":["class","decorators","es6","koa","koa-router","koa2","router"],"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/zaaack.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-30T13:08:27.000Z","updated_at":"2023-08-26T13:30:47.000Z","dependencies_parsed_at":"2023-07-07T17:00:44.230Z","dependency_job_id":null,"html_url":"https://github.com/zaaack/koa-dec-router","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fkoa-dec-router","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fkoa-dec-router/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fkoa-dec-router/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaaack%2Fkoa-dec-router/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zaaack","download_url":"https://codeload.github.com/zaaack/koa-dec-router/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250450350,"owners_count":21432640,"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":["class","decorators","es6","koa","koa-router","koa2","router"],"created_at":"2024-08-04T00:01:03.795Z","updated_at":"2025-04-23T14:26:32.977Z","avatar_url":"https://github.com/zaaack.png","language":"JavaScript","funding_links":[],"categories":["仓库"],"sub_categories":["中间件"],"readme":"# koa-dec-router\n\n* An ES6 decorator + class based router, support inherit, override, priority, auto load controllers, etc.\n* Using [koa-router](https://github.com/alexmingoia/koa-router) under the hood.\n* [Examples](test/app)\n\n\n[![Build Status](https://travis-ci.org/zaaack/koa-dec-router.svg?branch=master)](https://travis-ci.org/zaaack/koa-dec-router) [![npm](https://img.shields.io/npm/v/koa-dec-router.svg)](https://www.npmjs.com/package/koa-dec-router) [![npm](https://img.shields.io/npm/dm/koa-dec-router.svg)](https://www.npmjs.com/package/koa-dec-router)\n\n## Install\n\n```sh\nnpm i koa-dec-router\n\n```\n\nor\n\n```sh\nyarn add koa-dec-router\n```\n## Demo\n\napp.js\n```js\n\nimport Koa from 'koa'\nimport DecRouter from 'koa-dec-router'\n\nconst decRouter = DecRouter({\n  controllersDir: `${__dirname}/controllers`,\n  before: null, // global middleware\n  after: null, // global middleware\n})\n\nconst app = new Koa()\n\n// decRouter.router: `koa-router` instance\napp.use(decRouter.router.routes())\napp.use(decRouter.router.allowedMethods())\n\n```\n\ncontrollers/api.js\n```js\nimport { controller, get, post } from 'dec-router'\n\nasync function apiHandler(ctx, next) {\n  console.log('handle all api and subclass\\'s')\n  await next()\n}\n\n@controller('/api', apiHandler)\nexport default class Api {\n  async getApiCommon(ctx) {\n    // ...\n    return // some common data\n  }\n}\n\n```\n\ncontrollers/posts.js\n\n```js\n\nimport { controller, get, post } from 'dec-router'\nimport Api from './api'\n\nasync function postHandler(ctx, next) {\n  console.log('handle post')\n  await next()\n}\n\n// define multi controller class in one file. You can passing {expose: false} to disable exposing this controller, which can still be inherit.\n@controller('/subpost')\nexport class Subpost {\n  @get('s')\n  async list(ctx) {\n    ctx.body = 'get subpost'\n  }\n\n}\n\n@controller('/post')\nexport default class Post extends Api {\n\n  @get('s') // final path = parent controller path + controller path + method path\n  async list(ctx) {\n    const commonData = await super.getApiCommon()\n    ctx.body = 'get posts'\n  }\n\n  @get('/:id', {priority: -1}) // wildcard using low priority, let `special` method handle first\n  async get(ctx) {\n    ctx.body = 'get' + ctx.params.id\n  }\n\n  @get('/special')\n  async special(ctx) {\n    ctx.body = 'special post'\n  }\n}\n\n```\n\n## Console output\n\nTo output all routes generated by dec-router, you can run your app like\n\n```sh\nDEBUG=dec-router,your-app:* node ./your-app.js\n```\nFor windows, using [cross-env](https://github.com/kentcdodds/cross-env)\n\n```sh\ncross-env DEBUG=dec-router,your-app:* node ./your-app.js\n```\n\n![](docs/dev.png)\n\n\n[See more about `DEBUG`](https://github.com/visionmedia/debug)\n\n\n## API Reference\n\n### DecRouter(options)\n* options: {object}\n  * controllersDir: {string} controllers directory\n  * before: {function} optional, first middleware for all controller methods\n  * after: {function} optional, last middleware for all controller methods (before controller method)\n  * autoLoadControllers: {bool} optional, default is true\n\n### @controller(path, opts, ...middlewares)\n\n\u003e Controller decorator.\n\n* path: {string} optional, path of this controller, default is `'/' + slug(cls.name)`, can be inherited\n* opts: {object} optional, options, cannot be inherited\n  * ignoreParentPath: {bool} optional, default is false\n  * ignoreParentMdws: {bool} optional, default is false\n  * expose: {bool} optional, expose as a route default is false\n* middlewares: {Array\u003cfunction\u003e} optional, koa middlewares, can be inherited\n\n\n### @route(method, path, opts, ...middlewares)\n\u003e Controller method decorator, default would totally override superclass's method with **same path** (not same name), including method, opts, middlewares, etc.\n* method: {string}, one of `'get', 'head', 'post', 'put', 'delete', 'patch', 'use'`;\n* path: {string} optional, path of this method, default is `'/' + slug(method.name)`\n* opts: {object} optional, options\n  * priority: {number} optional, larger before smaller, default is 0\n  * ignoreCtrlPath: {bool} optional, ignore all controller path, including superclass's, default is false\n* middlewares: {Array\u003cfunction\u003e} optional, koa middlewares\n\n\n### @get(path, opts, ..middlewares)\nalias of @route('get', path, opts, ...middlewares)\n\n### @head(path, opts, ..middlewares)\nalias of @route('head', path, opts, ...middlewares)\n\n### @post(path, opts, ..middlewares)\nalias of @route('post', path, opts, ...middlewares)\n\n### @put(path, opts, ..middlewares)\nalias of @route('put', path, opts, ...middlewares)\n\n### @del(path, opts, ..middlewares)\nalias of @route('delete', path, opts, ...middlewares)\n\n### @patch(path, opts, ..middlewares)\nalias of @route('patch', path, opts, ...middlewares)\n\n### @all(path, opts, ..middlewares)\nalias of @route('use', path, opts, ...middlewares)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzaaack%2Fkoa-dec-router","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzaaack%2Fkoa-dec-router","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzaaack%2Fkoa-dec-router/lists"}