路由自动注册的原理:

  • 自动加载某个文件夹下的所有文件
  • 批量读取文件,注册路由;遍历 router文件夹,读取 *.js,自动注册路由

参考资料
https://www.npmjs.com/package/require-directory
https://blog.csdn.net/weixin_43756060/article/details/99562641

  1. npm install require-directory -S

require-directory

第一个参数:固定参数module,
第二个参数:要加载的模块的文件路径,
第三个参数:每次加载一个参数执行的函数

app.js 入口文件

  1. const Koa = require('koa');
  2. const Router = require('@koa/router')
  3. const requireDirectory = require('require-directory')
  4. const app = new Koa();
  5. const path = `${process.cwd()}/app/api`
  6. // 导入模块
  7. requireDirectory(module, path, {
  8. visit: autoLoad
  9. })
  10. // 需要判断导出的格式 module.exports = { router } & module.exports = router
  11. function autoLoad(route) {
  12. if (route instanceof Router) {
  13. app.use(route.routes())
  14. }
  15. }
  16. app.listen(3000)

process.cwd绝对路径

fs.readdirSync注册路由

  1. const fs = require('fs')
  2. module.exports = app => {
  3. // [ 'home.js', 'index.js', 'users.js' ]
  4. const list = fs.readdirSync(__dirname)
  5. list.forEach(file => {
  6. if (file === 'index.js') return
  7. const router = require(`./${file}`)
  8. // router instanceOf Router 验证是不是路由
  9. app
  10. .use(router.routes())
  11. .use(router.allowedMethods()) //响应 OPTIONS
  12. })
  13. }