如何从 nodejs 中的多个目录导入所有快速路由器文件?

How to import all express router files from multiple directories in nodejs?

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

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

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

用 Express 是不可能直接做到这一点的,通常人们用 NodeJS 手动管理模块,因为它根本不需要很多工作。在版本号方面,您可以在某处指定版本设置或常量,并根据该版本号导入。

例如:

// routes.js

const apiVersion = "v2";

module.exports = {
    require(`./${apiVersion}/auth.route`),
}

如果这不是理想的,管理它的一种 hacky 方法是使用 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);