Node Koa 路由模块化、业务文件拆分

在我们做koa-router配置的时候会遇到业务模块与路由注册混合在一起,要进行拆分才有利于后期维护与查看,最近看了很多文章发现拆分后的业务文件都是用router再注册一遍,实际上我们只要业务模块暴露它自己的方法,请求方式及URL就可以了,其他的内容不是业务模块所关心的,今天来分享下koa-router的路由模块化、业务文件拆分,使它们都“各司其职”

文件夹结构大致如下:
modules
-- xxx.js 业务模块代码
-- index.js 用于业务模块的统一引入
router
-- index.js 路由注册核心文件

image

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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容