Kooa 2ルートは複数のファイルに分割されます.

5015 ワード

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−composeという方法で最適化することができます.
3つのルートモジュールがそれぞれ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)