API 版本控制
优质
小牛编辑
134浏览
2023-12-01
Eggjs resfulApi 路由版本控制
- 插件:egg-router-plus
- 文档:https://github.com/eggjs/egg-router-plus
- 安装:
cnpm i -S egg-router-plus
配置
插件配置
// {app_root}/config/plugin.js
exports.routerPlus = {
enable: true,
package: 'egg-router-plus',
};
使用
module.exports = app => {
const { router, controller } = app;
const apiV1Router = router.namespace('/api/v1')
apiV1Router.post('/home', controller.home.index)
};
特点
加载 app/router/**/*.js
此插件将自动加载路由器定义为 app/router/**/*.js
。
注意:所有分路由器都将在 app/router.js
此之前加载。请确保所有子路由器定义都不冲突,app.router.namespace
为每个子路由器文件创建不同的名称空间。
app.router.namespace
app.router.namespace(prefix, ...middlewares);
prefix
- {String},子路由器的前缀字符串middlewares
- {...Function},可选组中间件
支持路由器:
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);
注:prefix
和 path
是不允许的 regex
,和 prefix
不能是 /。
// {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
不支持,使用app.router.redirect()
或者重定向到指定的路由器。
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');