|
|
2 years ago | |
|---|---|---|
| .. | ||
| lib | 2 years ago | |
| History.md | 2 years ago | |
| LICENSE | 2 years ago | |
| README.md | 2 years ago | |
| app.js | 2 years ago | |
| index.d.ts | 2 years ago | |
| package.json | 2 years ago | |
The missing router features for eggjs
$ npm i egg-router-plus --save
Then mount plugin:
// {app_root}/config/plugin.js
exports.routerPlus = {
enable: true,
package: 'egg-router-plus',
};
app/router/**/*.jsthis plugin will auto load router define at app/router/**/*.js.
Notice: all sub routers will be loaded before app/router.js, please ensure all the sub router definitions are not conflict(better to use app.router.namespace to create different namespaces for each sub router file).
app.router.namespace(prefix, ...middlewares);
prefix - {String}, the prefix string of sub routermiddlewares - {...Function}, optional group middlewaresSupport same as Router:
router.verb('path-match', app.controller.action);router.verb('path-match', middleware1, ..., middlewareN, app.controller.action);router.verb('router-name', 'path-match', app.controller.action);router.verb('router-name', 'path-match', middleware1, ..., middlewareN, app.controller.action);Note: prefix and path are not allow to be regex, and prefix can't be '/'.
// {app_root}/app/router.js
module.exports = app => {
const subRouter = app.router.namespace('/sub');
// curl localhost:7001/sub/test
subRouter.get('/test', app.controller.sub.test);
subRouter.get('sub_upload', '/upload', app.controller.sub.upload);
// const subRouter = app.router.namespace('/sub/:id');
// const subRouter = app.router.namespace('/sub', app.middleware.jsonp());
// output: /sub/upload
console.log(app.url('sub_upload'));
};
redirect is not support, use app.router.redirect() or redirect to a named router.const subRouter = app.router.namespace('/sub');
// will redirect `/sub/go` to `/anyway`, not `/sub/anyway`
subRouter.redirect('/go', '/anyway');
// just use router
router.redirect('/sub/go', '/sub/anyway');
// or redirect to a named router
subRouter.get('name_router', '/anyway', app.controller.sub.anyway);
// will redirect `/sub/go_name` to `/sub/anyway` which is named `name_router`
subRouter.redirect('/sub/go_name', 'name_router');
Please open an issue here.