Одним из вариантов будет экспорт массива маршрутизаторов, а не именование каждого из них. Затем вы можете просто перебрать этот массив, чтобы добавить их все в общем виде c. Таким образом, вместо импорта каждого по имени, как вы делаете здесь:
//src/routes/api/index.js
import { Router } from 'express'
import { cats, dogs } from './v0'
const v0 = Router()
v0.use('/v0', cats)
v0.use('/v0', dogs)
export { v0 }
Вы можете экспортировать и затем импортировать массив маршрутизаторов, а затем выполнить итерацию массива:
//src/routes/api/index.js
import { Router } from 'express'
import { allRouters } from './v0'
const v0 = Router()
for (const router of allRouters) {
v0.use('/v0', router)
}
export { v0 }
Фактически, Вы можете экспортировать как отдельные именованные маршрутизаторы, как у вас сейчас, так и массив маршрутизаторов, если хотите, и тогда импортирующий код может свободно использовать либо отдельные именованные маршрутизаторы, либо весь массив.
Дополнение к этому ответу после того, как OP отредактировал вопрос
Ваше редактирование к вопросу, который показывает это:
//src/routes/api/v0/index.js
export * from './cats'
export * from './dogs'
создает некоторые сложности для любого вида автоматов c коллекция все эти маршруты. ES6 import
и export
не могут быть определены динамически. Специально для ES6 необходим статический анализ импорта и экспорта. Таким образом, вы не можете импортировать или экспортировать в oop кода. Вот обсуждение этой топи c:
Могу ли я использовать циклы для минимизации операторов импорта ES6?
Если вы использовали require()
, то вы могли бы построить один модуль, который может либо просто прочитать файл конфигурации и загрузить все ваши файлы маршрутов, просматривая файловую систему, либо читая файл конфигурации, который определяет их все. Но вы можете сделать это с ES6 import
и export
. Итак, насколько я знаю, если вы собираетесь использовать import
и export
, вам придется указать импорт вручную. Поместив их в массив перед экспортом набора маршрутов, вам, по крайней мере, нужно будет выполнить ручное объявление один раз вместо двух (что является улучшением по сравнению с вашим текущим кодом).
Вот их импорт вручную, но затем экспортировать их в массив, который легче обрабатывать:
//src/routes/api/v0/index.js
import {dogs} from './dogs'
import {cats} from './cats'
export const allRouters = [dogs, cats];
Затем вы можете установить их:
//src/routes/api/index.js
import { Router } from 'express'
import { allRouters } from './v0'
const v0 = Router()
for (const router of allRouters) {
v0.use('/v0', router)
}
export { v0 }