在使用koa-router的時(shí)候會(huì)遇到路由的配置娃惯,雖然基本的配置很簡(jiǎn)單皆撩,但是當(dāng)我們的業(yè)務(wù)越來越復(fù)雜捍壤,涉及到的路由也越來越多槽畔,最開始的單文件路由配置就難以維護(hù)了栈妆。所以我們需要將路由根據(jù)模塊進(jìn)行拆分,從而根據(jù)模塊配置相應(yīng)的路由厢钧。
但是我們一般在進(jìn)行拆分的時(shí)候可能會(huì)遇到下面這樣的用法鳞尔,這屬于常規(guī)用法,但是模塊多了也就不怎么好看了早直。
app.use(A.routes())
app.use(A.allowedMethods())
app.use(B.routes())
app.use(B.allowedMethods())
app.use(C.routes())
app.use(C.allowedMethods())
因此我們可以采用koa-compose這個(gè)方法對(duì)其進(jìn)行優(yōu)化铅檩。
假設(shè)我們有三個(gè)路由模塊分別為A、B莽鸿、C,首先新建文件夾routes,并在routes文件夾下新建A.js昧旨、B.js拾给、C.js、index.js
routes/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
routes/B.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
routes/C.js
const Router = require('koa-router')
const router = new Router()
router.prefix('/C')
router.get('/all',(ctx,next)=>{
ctx.body = "hello C module router"
})
module.exports = router
routes/index.js
const compose = require('koa-compose')
const glob = require('glob')
const { resolve } = require('path')
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
index.js
const Koa = require('koa')
const registerRouter = require('./routes')
const app = new Koa()
app.use(registerRouter())
app.listen(3000)