【发布时间】:2021-07-26 05:41:26
【问题描述】:
我想我错过了一些简单的东西......
简单地说,为什么会这样:
router.use('/:object', require('../v1/routes'));
但这不是吗? [在埃弗特回答后编辑,如下]
function getRouter(req, res, next) {
return require('../v1/routes');
}
router.use('/:object', getRouter());
其中 '../v1/routes' 仅包含:
const express = require('express');
const router = express.router({ mergeParams: true });
router.get('/', getAll);
function getAll(req, res, next) {
res.send("Hello");
}
module.exports = router;
我希望动态地要求使用 API 版本作为文件系统基础的文件。更进一步,我将 API 版本作为 URL 的一部分,因此我希望使用它来驱动包含的路由文件的目录:
function getRouter(req, res, next) {
return require(`../${req.params.apiVersion}/routes`);
}
有没有办法通过动态要求其文件路径来包含路由器?
感谢您的帮助。
编辑 1 如果我按原来的方式返回函数调用:
function getRouter(req, res, next) {
console.log(req.params.apiVersion);
return require(`../${req.params.apiVersion}/routes`);
}
router.use('/:object', getRouter);
我实际上在控制台日志中写入了“v1”;所以参数实际上是存在的,但是'return require'...似乎没有像我想象的那样工作。
编辑 2 - 解决方案 感谢 Evert 的提示,我终于到达了那里:
function getRouter(req, res, next) {
const dynamicRouter = require(`../${req.params.apiVersion}/routes`);
return dynamicRouter(req, res, next);
}
router.use('/:object', getRouter);
【问题讨论】: