【问题标题】:How to import all express router files from multiple directories in nodejs?如何从nodejs中的多个目录导入所有快速路由器文件?
【发布时间】:2021-08-04 12:32:19
【问题描述】:

我正在构建一个支持版本控制的 REST API。这是我的目录结构。

.
├── src
│   ├── api
│   │   ├── v1
│   │   │   ├── modules ─ ...
│   │   │   ├── routers
│   │   │   │   ├─── auth.router.js
│   │   │   │   ├─── posts.router.js
│   │   ├── v2
│   │   │   ├── modules ─ ...
│   │   │   ├── routers ─ ...
├── app.js

我希望将路由器文件导入app.js。我已经找了几个小时的解决方案,但我发现的只是如何通过app.use() 手动导入每个文件。这是可行的,但随着版本号和路由器文件的不断增加,这可能会导致冗余工作。我需要一种方法以尽可能少的手动代码行来导入这些文件。

【问题讨论】:

    标签: node.js express routes directory-structure


    【解决方案1】:

    使用 Express 无法直接执行此操作,通常人们使用 NodeJS 手动管理模块,因为它根本不需要做很多工作。就版本号而言,您可以在某个地方指定版本设置或常量,并根据该数字进行导入。

    例如:

    // routes.js
    
    const apiVersion = "v2";
    
    module.exports = {
        require(`./${apiVersion}/auth.route`),
    }
    

    如果这不理想,一种管理方法是使用 fs 模块获取所有路由文件,然后自动导入它们。这是一种相当老套的方法,但我想出了这样的方法:

    // router.js
    
    const fs = require("fs/promises");
    const { Router } = require("express");
    
    const router = Router();
    
    const apiVersion = "v2";
    
    const loadRoutes = async () => {
        // grab all the route files from a directory using fs
        // use require to grab them from the source files
    }
    
    const routes = loadRoutes();
    routes.forEach(route => {
        router.use(route);
    })
    
    // app.js
    
    const router = require("./path/to/router");
    // ...boilerplate
    
    app.use(router);
    

    【讨论】:

    • 感谢@SamTheFam 的澄清。我只是想让它尽可能自动化。使用fs 可以帮助我:)
    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2019-04-09
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多