koa中使用require-directory实现路由自动注册

koa中使用require-directory实现路由自动注册
  • 第一步:导入依赖,使用npm导入koa、koa-router、require-directory

  • 第二步:在主程序中加入路由自动注册的代码

    const Koa = require("koa");
    const requireDirectory = require("require-directory");
    const Router = require("koa-router");
    
    const app = new Koa();
    
    // 第一个参数固定是module,第二个参数是要注册的router的相对路径,第三个参数是注册每个路由之前执行的业务代码
    requireDirectory(module, "./api/v1", {
        visit: (obj) => {
            // 判断当前对象是否是一个Router,这种判断方式很简单,只适用于导出时没有使用大括号的方式,如果使用了大括号,这里的判断逻辑相对就会复杂一些
            if(obj instanceof Router) {
                app.use(obj.routes());
            }
        }
    })
    
  • 第三步:编写路由

    路由必须放在/api/v1路径下,否则路由就不能自动注册

    const Router = require("koa-router");
    const router = new Router();
    
    router.get("/v1/book/laster", (ctx, next) => {
        ctx.body = {key: ctx.path};
    })
    
    // 这里导出时不能使用花括号,否则第二步的自动注册中的路由判断逻辑就要改
    module.exports = router;
    
代码优化

实现代码的分离,将主程序中的路由自动注册部分的代码抽取到初始化方法中

  • 新建文件core/init.js

    // init.js
    const requireDirectory = require("require-directory");
    const Router = require("koa-router");
    
    class InitManager {
        // app; // 这种写法在node.js中是错误的
      
        // 统一初始化方法
        static init(app) {
            // node.js中不支持在类中加属性的写法
            InitManager.app = app;
            InitManager.initLoadRouters();
        }
    
        // 路由自动注册
        static initLoadRouters() {
            // 获取api目录的绝对路径
            const apiDirectory = `${process.cwd()}/api`
            requireDirectory(module, apiDirectory, {
                visit: (obj) => {
                    if(obj instanceof Router) {
                        InitManager.app.use(obj.routes());
                    }
                }
            })
        }
    }
    
    module.exports = InitManager
    
  • 主程序调用

    // app.js
    const Koa = require("koa");
    const InitManager = require("./core/init");
    
    const app = new Koa();
    InitManager.init(app);
    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值