二次开发过很多项目,经常被混乱的路由搞晕
于是自己写了一个路由管理
目录结构
1 2 3 4 5 6 7 8 9 10
| ▾ src/ ▾ controllers/ ▾ user/ login.js register.js ▸ api/ routes.js ▾ utils/ router.js index.js
|
src/utils/router.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const Router = require('koa-router'); const path = require('path');
const R = new Router();
const allowMethods = new Set(['get', 'post']);
const createRoutes = routes => { routes.map(route => { const { prefix, actions } = route; actions.map(actionObject => { const { action, type, path: actionPath } = actionObject; const routePath = path.join(prefix, actionPath); if (allowMethods.has(type)) { console.log(`register route ${type.toUpperCase()}`, routePath); R[type](routePath, action); } else console.warn('route method is not allowed', routePath); }); }); return R; };
export default createRoutes;
|
router manager 创建路由列表
src/controller/routes.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import createRoutes from '@utils/router'; import loginAction from '@api/user/login'; import registerAction from '@api/user/register';
import joinAction from '@api/room/join';
const routes = [ { prefix: '/user', actions: [ { path: '/login', action: loginAction, type: 'post' }, { path: '/register', action: registerAction, type: 'post' } ] }, { prefix: '/room', actions: [{ path: '/join', action: joinAction, type: 'get' }] } ];
export default createRoutes(routes);
|
route 路由
src/controller/user/login.js
1 2 3
| export default async ctx => { await ctx.render('/view/login'); }
|
使用
src/index.js
1 2 3 4 5
| import routes from '@controllers/routes';
app.use(routes.routes()).use(routes.allowedMethods());
|
设置完成后,即生成了3个路由,路径分别为:
- POST /user/login
- POST /user/register
- GET /room/join
demo中的import from path
部分设置了module alias, 如有兴趣请搜索alias,查看alias设置篇