在我们做koa-router配置的时候会遇到业务模块与路由注册混合在一起,要进行拆分才有利于后期维护与查看,最近看了很多文章发现拆分后的业务文件都是用router再注册一遍,实际上我们只要业务模块暴露它自己的方法,请求方式及URL就可以了,其他的内容不是业务模块所关心的
目录结构:
modules
– xxx.js 业务模块代码
– index.js 用于业务模块的统一引入
router
– index.js 路由注册核心文件
modules/user.js
在此之模块js中只写入业务代码的内容、请求方式、请求地址
const getUser = async(ctx, next) => {
ctx.response.body = 'getUser'
}
const addUser = async(ctx, next) => {
ctx.response.body = 'addUser '
}
const editUser = async(ctx, next) => {
ctx.response.body = 'editUser '
}
const userRoutes = [{
type: 'post',
url: '/user/get',
method: getUser
}, {
type: 'post',
url: '/user/add',
method: addUser
}, {
type: 'post',
url: '/user/edit',
method: editUser
}]
module.exports = userRoutes
modules/index.js
当我们拆分了多个模块,需要一个统一引入的入口文件
const userRoutes = require('./user')
const companyRoutes = require('./company')
module.exports = [ ...userRoutes, ...companyRoutes ]
router/index.js
最后则是路由文件统一进行注册
const Koa = require('koa')
const Router = require('koa-router')
const modules = require('../modules')
const app = new Koa()
const router = new Router()
for (const route of modules) {
if (route.type === 'get') {
router.get(route.url, route.method)
} else if (route.type === 'post') {
router.post(route.url, route.method)
}
}
app.use(router.routes())
app.listen(3000)