在使用koa-router的时候会遇到路由的配置,虽然基本的配置很简单,但是当我们的业务越来越复杂,涉及到的路由也越来越多,最开始的单文件路由配置就难以维护了。所以我们需要将路由根据模块进行拆分,从而根据模块配置相应的路由。
但是我们一般在进行拆分的时候可能会遇到下面这样的用法,这属于常规用法,但是模块多了也就不怎么好看了。
第一种路由拆分方法
app.use(A.routes()) app.use(A.allowedMethods()) app.use(B.routes()) app.use(B.allowedMethods()) app.use(C.routes()) app.use(C.allowedMethods())
A.js代码如下:
const Router = require('koa-router') const router = new Router() router.prefix('/B') router.get('/all',(ctx,next)=>{ ctx.body = "hello B module router" }) module.exports = router
b.js和c.js写法均与a.js一致,每个文件需要引入koa-router与实例化router,而且在app.js需要多次use
第二种路由拆分方法
const routes = require('./routes') const users = require('./routes/users.js') routes(router) users(router)
这种方法与第一种写路由的方式是有区别的,不需要每次引入koa-router与实例化router,但是需要每次use
users.js代码如下:
module.exports = (router) => { router.get('/users', async function (ctx, next) { ctx.body = 'this a users response!'; }) }
第三种路由拆分方法
每个路由文件写法与第一种一致,需要每次引入koa-router与实例化router,好处是自动注册路由,不需要每次都use
例如A.js
const Router = require('koa-router') const router = new Router() router.prefix('/A') router.get('/all',(ctx,next)=>{ ctx.body = "hello A module router" }) module.exports = router
新建index.js代码如下:
const compose = require('koa-compose') const glob = require('glob') const { resolve } = require('path') const Router = require('koa-router') const router = new Router() registerRouter = () => { let routers = []; glob.sync(resolve(__dirname, './', '**/*.js')) .filter(value => (value.indexOf('index.js') === -1)) .map(router => { routers.push(require(router).routes()) routers.push(require(router).allowedMethods()) }) return compose(routers) } module.exports = registerRouter
读取当前文件夹下所有的js文件然后循环require每个文件
app.js代码如下
const registerRouter = require('./routes') app.use(registerRouter())
第四种路由注册方法
例如A.js
const Router = require('koa-router'); const router = new Router(); router.get('/v1/classic/lates', async (ctx, next) => { ctx.body = { code: 1 } }) module.exports = router
app.js
const Koa = require('koa'); const app = new Koa(); const Router = require('koa-router'); const RequireDirectory = require('require-directory'); //期刊 const classic = require('./api/v1/classic') // 书籍 const book = require('./api/v1/classic') //自动注册路由 const modules = RequireDirectory(module, './api', { visit: loadModules }); function loadModules(obj) { app.use(obj.routes()).use(obj.allowedMethods()) } app.listen(3000);
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接