node.js - 如何从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 手动管理模块,因为它根本不需要做很多工作。就版本号而言,您可以指定版本设置或常量 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);
推荐阅读
- python - python扩展中的打印格式
- javascript - 通过JSON解析后的VUE.JS得到错误的输出
- sql - SQL Server 扩展表并在日期范围内为每一行添加日期
- ansible - 无法让 Ansible 在 Azure Pipelines 上运行以进行配置管理
- macos - 使用 com.apple.mail.plist 进行邮件帐户切换的终端快捷方式
- php - 如何使用带有 foreach 循环的下拉列表将数据插入数据库
- c - CreateFile - dwDesiredAccess
- django - 想要打印用户所属的所有组
- performance - golang lambda中的快速重新发送响应
- android - 如何在 DialogFragment 中更改文本颜色或日期选择器的分隔线颜色?