{"_id":"@eggjs/router","_rev":"1213273","name":"@eggjs/router","description":"Router middleware for egg/koa. Provides RESTful resource routing.","dist-tags":{"latest":"2.0.1","latest-1":"1.2.0"},"maintainers":[{"name":"atian25","email":"atian25@qq.com"},{"name":"dead_horse","email":"dead_horse@qq.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"hubcarl","email":"hubcarl@126.com"},{"name":"hyj1991","email":"yeekwanvong@gmail.com"},{"name":"killagu","email":"killa07071201@gmail.com"},{"name":"thonatos","email":"thonatos.yang@gmail.com"},{"name":"wanghx","email":"851094531@qq.com"},{"name":"xadillax","email":"admin@xcoder.in"}],"time":{"modified":"2021-10-13T05:46:43.000Z","created":"2019-01-30T02:44:31.969Z","2.0.1":"2021-07-12T03:22:05.182Z","2.0.0":"2019-02-14T09:03:27.345Z","1.2.0":"2019-02-14T03:48:57.790Z","1.1.0":"2019-01-30T06:08:51.622Z","1.0.0":"2019-01-30T02:44:31.969Z"},"users":{},"author":{"name":"eggjs"},"repository":{"type":"git","url":"git+https://github.com/eggjs/egg-router.git"},"versions":{"2.0.1":{"name":"@eggjs/router","version":"2.0.1","description":"Router middleware for egg/koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/eggjs/egg-router.git"},"bugs":{"url":"https://github.com/eggjs/egg/issues"},"author":{"name":"eggjs"},"keywords":["koa","middleware","router","route"],"dependencies":{"co":"^4.6.0","debug":"^3.1.0","http-errors":"^1.3.1","inflection":"^1.12.0","is-type-of":"^1.2.1","koa-compose":"^3.0.0","koa-convert":"^1.2.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0","utility":"^1.15.0"},"devDependencies":{"egg-bin":"^4.10.0","egg-ci":"^1.11.0","eslint":"^5.13.0","eslint-config-egg":"^7.1.0","expect.js":"^0.3.1","koa":"^2.7.0","mocha":"^2.0.1","should":"^6.0.3","supertest":"^1.0.1"},"scripts":{"test-local":"egg-bin test","test":"npm run lint && egg-bin test","ci":"npm run lint && egg-bin cov","lint":"eslint ."},"ci":{"type":"github","version":"8, 10, 11"},"engines":{"node":">= 8"},"license":"MIT","gitHead":"585005f176f3649d014b20f8356233da92013d41","homepage":"https://github.com/eggjs/egg-router#readme","_id":"@eggjs/router@2.0.1","_nodeVersion":"10.16.0","_npmVersion":"6.14.8","dist":{"shasum":"e7812b54daeac828ee85e809e16ff342b44505dc","size":15143,"noattachment":false,"key":"/@eggjs/router/-/@eggjs/router-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@eggjs/router/download/@eggjs/router-2.0.1.tgz"},"_npmUser":{"name":"dead_horse","email":"dead_horse@qq.com"},"directories":{},"maintainers":[{"name":"atian25","email":"atian25@qq.com"},{"name":"dead_horse","email":"dead_horse@qq.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"hubcarl","email":"hubcarl@126.com"},{"name":"hyj1991","email":"yeekwanvong@gmail.com"},{"name":"killagu","email":"killa07071201@gmail.com"},{"name":"thonatos","email":"thonatos.yang@gmail.com"},{"name":"wanghx","email":"851094531@qq.com"},{"name":"xadillax","email":"admin@xcoder.in"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_2.0.1_1626060125039_0.3230498416217191"},"_hasShrinkwrap":false,"publish_time":1626060125182,"_cnpm_publish_time":1626060125182},"2.0.0":{"name":"@eggjs/router","version":"2.0.0","description":"Router middleware for egg/koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/eggjs/egg-router.git"},"bugs":{"url":"https://github.com/eggjs/egg/issues"},"author":{"name":"eggjs"},"keywords":["koa","middleware","router","route"],"dependencies":{"co":"^4.6.0","debug":"^3.1.0","http-errors":"^1.3.1","inflection":"^1.12.0","is-type-of":"^1.2.1","koa-compose":"^3.0.0","koa-convert":"^1.2.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0","utility":"^1.15.0"},"devDependencies":{"egg-bin":"^4.10.0","egg-ci":"^1.11.0","eslint":"^5.13.0","eslint-config-egg":"^7.1.0","expect.js":"^0.3.1","koa":"^2.7.0","mocha":"^2.0.1","should":"^6.0.3","supertest":"^1.0.1"},"scripts":{"test-local":"egg-bin test","test":"npm run lint && egg-bin test","ci":"npm run lint && egg-bin cov","lint":"eslint ."},"ci":{"version":"8, 10, 11"},"engines":{"node":">= 8"},"license":"MIT","gitHead":"512808fc1b9b0b3236e906a7b770f722b181bdcc","homepage":"https://github.com/eggjs/egg-router#readme","_id":"@eggjs/router@2.0.0","_npmVersion":"6.5.0","_nodeVersion":"10.15.0","_npmUser":{"name":"fengmk2","email":"fengmk2@gmail.com"},"dist":{"shasum":"9b164dd9d6d97081502e5fdc77a734359513618a","size":15330,"noattachment":false,"key":"/@eggjs/router/-/@eggjs/router-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@eggjs/router/download/@eggjs/router-2.0.0.tgz"},"maintainers":[{"name":"atian25","email":"atian25@qq.com"},{"name":"dead_horse","email":"dead_horse@qq.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"hubcarl","email":"hubcarl@126.com"},{"name":"hyj1991","email":"yeekwanvong@gmail.com"},{"name":"killagu","email":"killa07071201@gmail.com"},{"name":"thonatos","email":"thonatos.yang@gmail.com"},{"name":"wanghx","email":"851094531@qq.com"},{"name":"xadillax","email":"admin@xcoder.in"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_2.0.0_1550135007152_0.3446073671648595"},"_hasShrinkwrap":false,"publish_time":1550135007345,"_cnpm_publish_time":1550135007345},"1.2.0":{"name":"@eggjs/router","description":"Router middleware for egg/koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/eggjs/egg-router.git"},"author":{"name":"eggjs"},"version":"1.2.0","keywords":["koa","middleware","router","route"],"dependencies":{"co":"^4.6.0","debug":"^3.1.0","http-errors":"^1.3.1","inflection":"^1.12.0","is-type-of":"^1.2.1","koa-compose":"^3.0.0","koa-convert":"^1.2.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0","utility":"^1.15.0"},"devDependencies":{"egg-bin":"^4.10.0","egg-ci":"^1.11.0","expect.js":"^0.3.1","koa":"2.2.0","mocha":"^2.0.1","should":"^6.0.3","supertest":"^1.0.1"},"scripts":{"test":"egg-bin test","ci":"egg-bin cov"},"ci":{"version":"8, 10"},"engines":{"node":">= 8"},"license":"MIT","gitHead":"96817561171692cd76e270e671decf3a8e2e6346","bugs":{"url":"https://github.com/eggjs/egg-router/issues"},"homepage":"https://github.com/eggjs/egg-router#readme","_id":"@eggjs/router@1.2.0","_npmVersion":"6.4.1","_nodeVersion":"8.11.1","_npmUser":{"name":"xadillax","email":"admin@xcoder.in"},"dist":{"shasum":"268709fa5ee88577f66da5afc96f2389447a3530","size":14791,"noattachment":false,"key":"/@eggjs/router/-/@eggjs/router-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@eggjs/router/download/@eggjs/router-1.2.0.tgz"},"maintainers":[{"name":"atian25","email":"atian25@qq.com"},{"name":"dead_horse","email":"dead_horse@qq.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"hubcarl","email":"hubcarl@126.com"},{"name":"hyj1991","email":"yeekwanvong@gmail.com"},{"name":"killagu","email":"killa07071201@gmail.com"},{"name":"thonatos","email":"thonatos.yang@gmail.com"},{"name":"wanghx","email":"851094531@qq.com"},{"name":"xadillax","email":"admin@xcoder.in"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_1.2.0_1550116137618_0.19415886895705503"},"_hasShrinkwrap":false,"publish_time":1550116137790,"_cnpm_publish_time":1550116137790},"1.1.0":{"name":"@eggjs/router","description":"Router middleware for egg/koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/eggjs/egg-router.git"},"author":{"name":"eggjs"},"version":"1.1.0","keywords":["koa","middleware","router","route"],"dependencies":{"co":"^4.6.0","debug":"^3.1.0","http-errors":"^1.3.1","inflection":"^1.12.0","is-type-of":"^1.2.1","koa-compose":"^3.0.0","koa-convert":"^1.2.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0","utility":"^1.15.0"},"devDependencies":{"egg-bin":"^4.10.0","egg-ci":"^1.11.0","expect.js":"^0.3.1","koa":"2.2.0","mocha":"^2.0.1","should":"^6.0.3","supertest":"^1.0.1"},"scripts":{"test":"egg-bin test","ci":"egg-bin cov"},"ci":{"version":"8, 10"},"engines":{"node":">= 8"},"license":"MIT","gitHead":"753bbf8e458a67757cc1eacf30d6740c19f869e5","bugs":{"url":"https://github.com/eggjs/egg-router/issues"},"homepage":"https://github.com/eggjs/egg-router#readme","_id":"@eggjs/router@1.1.0","_npmVersion":"5.8.0","_nodeVersion":"8.11.1","_npmUser":{"name":"dead_horse","email":"dead_horse@qq.com"},"dist":{"shasum":"cc1f3b89d62a56a88e91bfac88ad112e0571e369","size":14450,"noattachment":false,"key":"/@eggjs/router/-/@eggjs/router-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@eggjs/router/download/@eggjs/router-1.1.0.tgz"},"maintainers":[{"name":"atian25","email":"atian25@qq.com"},{"name":"dead_horse","email":"dead_horse@qq.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"hubcarl","email":"hubcarl@126.com"},{"name":"hyj1991","email":"yeekwanvong@gmail.com"},{"name":"killagu","email":"killa07071201@gmail.com"},{"name":"thonatos","email":"thonatos.yang@gmail.com"},{"name":"wanghx","email":"851094531@qq.com"},{"name":"xadillax","email":"admin@xcoder.in"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_1.1.0_1548828531484_0.6380078964547766"},"_hasShrinkwrap":false,"publish_time":1548828531622,"_cnpm_publish_time":1548828531622},"1.0.0":{"name":"@eggjs/router","description":"Router middleware for egg/koa. Provides RESTful resource routing.","repository":{"type":"git","url":"git+https://github.com/eggjs/egg-router.git"},"main":"lib/router.js","author":{"name":"eggjs"},"version":"1.0.0","keywords":["koa","middleware","router","route"],"dependencies":{"debug":"^3.1.0","http-errors":"^1.3.1","koa-compose":"^3.0.0","methods":"^1.0.1","path-to-regexp":"^1.1.1","urijs":"^1.19.0"},"devDependencies":{"expect.js":"^0.3.1","jsdoc-to-markdown":"^1.1.1","koa":"2.2.0","mocha":"^2.0.1","should":"^6.0.3","supertest":"^1.0.1"},"scripts":{"test":"NODE_ENV=test mocha test/**/*.js","docs":"NODE_ENV=test jsdoc2md -t ./lib/README_tpl.hbs --src ./lib/*.js  >| README.md"},"engines":{"node":">= 4"},"license":"MIT","gitHead":"6f98c2e83083ef28291b462c9beaf40b6ac1de19","bugs":{"url":"https://github.com/eggjs/egg-router/issues"},"homepage":"https://github.com/eggjs/egg-router#readme","_id":"@eggjs/router@1.0.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.1","_npmUser":{"name":"dead_horse","email":"dead_horse@qq.com"},"dist":{"shasum":"9321c2bc0e649eaae8e209b534d5b8d03d5f89fa","size":11822,"noattachment":false,"key":"/@eggjs/router/-/@eggjs/router-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@eggjs/router/download/@eggjs/router-1.0.0.tgz"},"maintainers":[{"name":"atian25","email":"atian25@qq.com"},{"name":"dead_horse","email":"dead_horse@qq.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"hubcarl","email":"hubcarl@126.com"},{"name":"hyj1991","email":"yeekwanvong@gmail.com"},{"name":"killagu","email":"killa07071201@gmail.com"},{"name":"thonatos","email":"thonatos.yang@gmail.com"},{"name":"wanghx","email":"851094531@qq.com"},{"name":"xadillax","email":"admin@xcoder.in"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/router_1.0.0_1548816271839_0.9244776178063174"},"_hasShrinkwrap":false,"publish_time":1548816271969,"_cnpm_publish_time":1548816271969}},"readme":"# @eggjs/router\n\nRouter core component for [Egg.js](https://github.com/eggjs).\n\n> **This repository is a fork of [koa-router](https://github.com/alexmingoia/koa-router).** with some additional features.\n\n> And thanks for the greate work of @alexmingoia and the original team.\n\n## API Reference\n\n* [egg-router](#module_egg-router)\n    * [Router](#exp_module_egg-router--Router) ⏏\n        * [new Router([opts])](#new_module_egg-router--Router_new)\n        * _instance_\n            * [.get|put|post|patch|delete|del](#module_egg-router--Router+get|put|post|patch|delete|del) ⇒ <code>Router</code>\n            * [.routes](#module_egg-router--Router+routes) ⇒ <code>function</code>\n            * [.use([path], middleware)](#module_egg-router--Router+use) ⇒ <code>Router</code>\n            * [.prefix(prefix)](#module_egg-router--Router+prefix) ⇒ <code>Router</code>\n            * [.allowedMethods([options])](#module_egg-router--Router+allowedMethods) ⇒ <code>function</code>\n            * [.redirect(source, destination, [code])](#module_egg-router--Router+redirect) ⇒ <code>Router</code>\n            * [.route(name)](#module_egg-router--Router+route) ⇒ <code>Layer</code> &#124; <code>false</code>\n            * [.url(name, params, [options])](#module_egg-router--Router+url) ⇒ <code>String</code> &#124; <code>Error</code>\n            * [.param(param, middleware)](#module_egg-router--Router+param) ⇒ <code>Router</code>\n        * _static_\n            * [.url(path, params)](#module_egg-router--Router.url) ⇒ <code>String</code>\n\n<a name=\"exp_module_egg-router--Router\"></a>\n\n### Router ⏏\n**Kind**: Exported class\n<a name=\"new_module_egg-router--Router_new\"></a>\n\n#### new Router([opts])\nCreate a new router.\n\n\n| Param | Type | Description |\n| --- | --- | --- |\n| [opts] | <code>Object</code> |  |\n| [opts.prefix] | <code>String</code> | prefix router paths |\n\n**Example**\nBasic usage:\n\n```javascript\nvar Koa = require('koa');\nvar Router = require('@eggjs/router');\n\nvar app = new Koa();\nvar router = new Router();\n\nrouter.get('/', (ctx, next) => {\n  // ctx.router available\n});\n\napp\n  .use(router.routes())\n  .use(router.allowedMethods());\n```\n<a name=\"module_egg-router--Router+get|put|post|patch|delete|del\"></a>\n\n#### router.get|put|post|patch|delete|del ⇒ <code>Router</code>\nCreate `router.verb()` methods, where *verb* is one of the HTTP verbs such\nas `router.get()` or `router.post()`.\n\nMatch URL patterns to callback functions or controller actions using `router.verb()`,\nwhere **verb** is one of the HTTP verbs such as `router.get()` or `router.post()`.\n\nAdditionaly, `router.all()` can be used to match against all methods.\n\n```javascript\nrouter\n  .get('/', (ctx, next) => {\n    ctx.body = 'Hello World!';\n  })\n  .post('/users', (ctx, next) => {\n    // ...\n  })\n  .put('/users/:id', (ctx, next) => {\n    // ...\n  })\n  .del('/users/:id', (ctx, next) => {\n    // ...\n  })\n  .all('/users/:id', (ctx, next) => {\n    // ...\n  });\n```\n\nWhen a route is matched, its path is available at `ctx.routePath` and if named,\nthe name is available at `ctx.routeName`\n\nRoute paths will be translated to regular expressions using\n[path-to-regexp](https://github.com/pillarjs/path-to-regexp).\n\nQuery strings will not be considered when matching requests.\n\n#### Named routes\n\nRoutes can optionally have names. This allows generation of URLs and easy\nrenaming of URLs during development.\n\n```javascript\nrouter.get('user', '/users/:id', (ctx, next) => {\n // ...\n});\n\nrouter.url('user', 3);\n// => \"/users/3\"\n```\n\n#### Multiple middleware\n\nMultiple middleware may be given:\n\n```javascript\nrouter.get(\n  '/users/:id',\n  (ctx, next) => {\n    return User.findOne(ctx.params.id).then(function(user) {\n      ctx.user = user;\n      next();\n    });\n  },\n  ctx => {\n    console.log(ctx.user);\n    // => { id: 17, name: \"Alex\" }\n  }\n);\n```\n\n### Nested routers\n\nNesting routers is supported:\n\n```javascript\nvar forums = new Router();\nvar posts = new Router();\n\nposts.get('/', (ctx, next) => {...});\nposts.get('/:pid', (ctx, next) => {...});\nforums.use('/forums/:fid/posts', posts.routes(), posts.allowedMethods());\n\n// responds to \"/forums/123/posts\" and \"/forums/123/posts/123\"\napp.use(forums.routes());\n```\n\n#### Router prefixes\n\nRoute paths can be prefixed at the router level:\n\n```javascript\nvar router = new Router({\n  prefix: '/users'\n});\n\nrouter.get('/', ...); // responds to \"/users\"\nrouter.get('/:id', ...); // responds to \"/users/:id\"\n```\n\n#### URL parameters\n\nNamed route parameters are captured and added to `ctx.params`.\n\n```javascript\nrouter.get('/:category/:title', (ctx, next) => {\n  console.log(ctx.params);\n  // => { category: 'programming', title: 'how-to-node' }\n});\n```\n\nThe [path-to-regexp](https://github.com/pillarjs/path-to-regexp) module is\nused to convert paths to regular expressions.\n\n**Kind**: instance property of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type | Description |\n| --- | --- | --- |\n| path | <code>String</code> |  |\n| [middleware] | <code>function</code> | route middleware(s) |\n| callback | <code>function</code> | route callback |\n\n<a name=\"module_egg-router--Router+routes\"></a>\n\n#### router.routes ⇒ <code>function</code>\nReturns router middleware which dispatches a route matching the request.\n\n**Kind**: instance property of <code>[Router](#exp_module_egg-router--Router)</code>\n<a name=\"module_egg-router--Router+use\"></a>\n\n#### router.use([path], middleware) ⇒ <code>Router</code>\nUse given middleware.\n\nMiddleware run in the order they are defined by `.use()`. They are invoked\nsequentially, requests start at the first middleware and work their way\n\"down\" the middleware stack.\n\n**Kind**: instance method of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type |\n| --- | --- |\n| [path] | <code>String</code> |\n| middleware | <code>function</code> |\n| [...] | <code>function</code> |\n\n**Example**\n```javascript\n// session middleware will run before authorize\nrouter\n  .use(session())\n  .use(authorize());\n\n// use middleware only with given path\nrouter.use('/users', userAuth());\n\n// or with an array of paths\nrouter.use(['/users', '/admin'], userAuth());\n\napp.use(router.routes());\n```\n<a name=\"module_egg-router--Router+prefix\"></a>\n\n#### router.prefix(prefix) ⇒ <code>Router</code>\nSet the path prefix for a Router instance that was already initialized.\n\n**Kind**: instance method of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type |\n| --- | --- |\n| prefix | <code>String</code> |\n\n**Example**\n```javascript\nrouter.prefix('/things/:thing_id')\n```\n<a name=\"module_egg-router--Router+allowedMethods\"></a>\n\n#### router.allowedMethods([options]) ⇒ <code>function</code>\nReturns separate middleware for responding to `OPTIONS` requests with\nan `Allow` header containing the allowed methods, as well as responding\nwith `405 Method Not Allowed` and `501 Not Implemented` as appropriate.\n\n**Kind**: instance method of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type | Description |\n| --- | --- | --- |\n| [options] | <code>Object</code> |  |\n| [options.throw] | <code>Boolean</code> | throw error instead of setting status and header |\n| [options.notImplemented] | <code>function</code> | throw the returned value in place of the default NotImplemented error |\n| [options.methodNotAllowed] | <code>function</code> | throw the returned value in place of the default MethodNotAllowed error |\n\n**Example**\n```javascript\nvar Koa = require('koa');\nvar Router = require('egg-router');\n\nvar app = new Koa();\nvar router = new Router();\n\napp.use(router.routes());\napp.use(router.allowedMethods());\n```\n\n**Example with [Boom](https://github.com/hapijs/boom)**\n\n```javascript\nvar Koa = require('koa');\nvar Router = require('egg-router');\nvar Boom = require('boom');\n\nvar app = new Koa();\nvar router = new Router();\n\napp.use(router.routes());\napp.use(router.allowedMethods({\n  throw: true,\n  notImplemented: () => new Boom.notImplemented(),\n  methodNotAllowed: () => new Boom.methodNotAllowed()\n}));\n```\n<a name=\"module_egg-router--Router+redirect\"></a>\n\n#### router.redirect(source, destination, [code]) ⇒ <code>Router</code>\nRedirect `source` to `destination` URL with optional 30x status `code`.\n\nBoth `source` and `destination` can be route names.\n\n```javascript\nrouter.redirect('/login', 'sign-in');\n```\n\nThis is equivalent to:\n\n```javascript\nrouter.all('/login', ctx => {\n  ctx.redirect('/sign-in');\n  ctx.status = 301;\n});\n```\n\n**Kind**: instance method of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type | Description |\n| --- | --- | --- |\n| source | <code>String</code> | URL or route name. |\n| destination | <code>String</code> | URL or route name. |\n| [code] | <code>Number</code> | HTTP status code (default: 301). |\n\n<a name=\"module_egg-router--Router+route\"></a>\n\n#### router.route(name) ⇒ <code>Layer</code> &#124; <code>false</code>\nLookup route with given `name`.\n\n**Kind**: instance method of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type |\n| --- | --- |\n| name | <code>String</code> |\n\n<a name=\"module_egg-router--Router+url\"></a>\n\n#### router.url(name, params, [options]) ⇒ <code>String</code> &#124; <code>Error</code>\nGenerate URL for route. Takes a route name and map of named `params`.\n\n**Kind**: instance method of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type | Description |\n| --- | --- | --- |\n| name | <code>String</code> | route name |\n| params | <code>Object</code> | url parameters |\n| [options] | <code>Object</code> | options parameter |\n| [options.query] | <code>Object</code> &#124; <code>String</code> | query options |\n\n**Example**\n```javascript\nrouter.get('user', '/users/:id', (ctx, next) => {\n  // ...\n});\n\nrouter.url('user', 3);\n// => \"/users/3\"\n\nrouter.url('user', { id: 3 });\n// => \"/users/3\"\n\nrouter.use((ctx, next) => {\n  // redirect to named route\n  ctx.redirect(ctx.router.url('sign-in'));\n})\n\nrouter.url('user', { id: 3 }, { query: { limit: 1 } });\n// => \"/users/3?limit=1\"\n\nrouter.url('user', { id: 3 }, { query: \"limit=1\" });\n// => \"/users/3?limit=1\"\n```\n<a name=\"module_egg-router--Router+param\"></a>\n\n#### router.param(param, middleware) ⇒ <code>Router</code>\nRun middleware for named route parameters. Useful for auto-loading or\nvalidation.\n\n**Kind**: instance method of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type |\n| --- | --- |\n| param | <code>String</code> |\n| middleware | <code>function</code> |\n\n**Example**\n```javascript\nrouter\n  .param('user', (id, ctx, next) => {\n    ctx.user = users[id];\n    if (!ctx.user) return ctx.status = 404;\n    return next();\n  })\n  .get('/users/:user', ctx => {\n    ctx.body = ctx.user;\n  })\n  .get('/users/:user/friends', ctx => {\n    return ctx.user.getFriends().then(function(friends) {\n      ctx.body = friends;\n    });\n  })\n  // /users/3 => {\"id\": 3, \"name\": \"Alex\"}\n  // /users/3/friends => [{\"id\": 4, \"name\": \"TJ\"}]\n```\n<a name=\"module_egg-router--Router.url\"></a>\n\n#### Router.url(path, params [, options]) ⇒ <code>String</code>\nGenerate URL from url pattern and given `params`.\n\n**Kind**: static method of <code>[Router](#exp_module_egg-router--Router)</code>\n\n| Param | Type | Description |\n| --- | --- | --- |\n| path | <code>String</code> | url pattern |\n| params | <code>Object</code> | url parameters |\n| [options] | <code>Object</code> | options parameter |\n| [options.query] | <code>Object</code> &#124; <code>String</code> | query options |\n\n**Example**\n```javascript\nvar url = Router.url('/users/:id', {id: 1});\n// => \"/users/1\"\n\nconst url = Router.url('/users/:id', {id: 1}, {query: { active: true }});\n// => \"/users/1?active=true\"\n```\n\n## Tests\n\nRun tests using `npm test`.\n","_attachments":{},"homepage":"https://github.com/eggjs/egg-router#readme","bugs":{"url":"https://github.com/eggjs/egg/issues"},"license":"MIT"}