首页 > 解决方案 > 如何从nodejs中的多个目录导入所有快速路由器文件?

问题描述

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

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

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

标签: node.jsexpressroutesdirectory-structure

解决方案


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

例如:

// routes.js

const apiVersion = "v2";

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

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

// 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);

推荐阅读