如何在Express Server中加载不同文件夹下的API Endpoints
问题原因
你现有的第一版路由加载逻辑会读取routes/api目录下的所有条目,包含你新增的extras文件夹。当代码遍历到extras条目时,会直接尝试加载./routes/api/extras作为路由模块,但extras是文件夹而非可导入的JS路由文件,因此抛出MODULE_NOT_FOUND错误。
解决方案
修改原有普通API端点的加载逻辑,过滤掉文件夹,仅处理后缀为.js的路由文件,再保留你新增的extras目录加载逻辑即可,修改后的完整代码如下:
const fs = require('fs') const path = require('path') // 加载普通API端点 fs.readdirSync('./routes/api').forEach(r => { const entryPath = path.join('./routes/api', r) // 仅处理JS文件,跳过extras这类文件夹 if (fs.statSync(entryPath).isFile() && r.endsWith('.js')) { const routeName = r.split('.')[0] app.use(`/api/v1/${routeName}`, require(`./routes/api/${routeName}`)) } }) // 加载extras目录下的工具类端点 fs.readdirSync('./routes/api/extras').forEach(r => { if (r.endsWith('.js')) { const routeName = r.split('.')[0] app.use(`/api/v1/extras/${routeName}`, require(`./routes/api/extras/${routeName}`)) } })
可选优化:如果后续可能新增更多子目录,可编写递归遍历逻辑自动识别子目录、生成对应路由前缀,无需手动新增加载代码。
内容的提问来源于stack exchange,提问作者Kirasiris
相关产品推荐
相关产品推荐

