如何通过在目标路由中连接变量来导入模块?

How can I import a module by concatenating a variable in the destination route?

我正在尝试根据函数中接收到的参数导入模块,当我使用 Common JS 时它对我有用,但在我更改为 ES 模块后我无法做到。

这是对我有用的代码,将变量与 require

连接起来
 fs.readdirSync(PATH_ROUTES).filter((file) => {
    const name = removeExtension(file);
    if (name != 'index') {
        router.use(`/${name}`, require(`./${file}`));
    }
})

我如何使用 ES 模块来做到这一点?

编辑

这是路由文件之一,如您所见,我正在使用 ESM 导入所有内容,因为我已完全迁移到 ESM。

import express from 'express';
import authMiddleware from '../middleware/session.js';
import checkRol from '../middleware/rol.js';
import { validatorGetItem, validatorUpdateItem } from '../validators/users.js';
import { getItems, getItem, updateItem, deleteItem } from '../controllers/users.js';

const router = express.Router();

router.get("/", authMiddleware, checkRol(['administrador']), getItems);
router.get("/:id", authMiddleware, checkRol(['administrador']), validatorGetItem, getItem);
router.put("/:id", authMiddleware, checkRol(['administrador']), validatorGetItem, validatorUpdateItem, updateItem);
router.delete("/:id", authMiddleware, checkRol(['administrador']), validatorGetItem, deleteItem);

export default router;

要使用计算文件名,您必须使用 dynamic import(),而不是静态 import.

 fs.readdirSync(PATH_ROUTES).forEach(file => {
     const name = removeExtension(file);
     if (name != 'index') {
         router.use(`/${name}`, await import(`./${file}`));
     }
 }