[NodeJS] Как вывеси список файлов массивом?

Всем доброго времени суток.

Пишу небольшое MVC приложение на `NodeJS` и немного застрял с созданием созданием роутера, а точнее с одной из функций данного класса.

Ближе к делу. Я хочу, чтобы моё приложение "сканировало" папку 'Modules' в котором будут содержатся различные модули приложения, к примеру модуль админ-панели, либо же сам фронтенд, который доступен пользователю.

На данный момент моя папка 'Modules' выглядит так:

Modules/Frontend
_____Controller/...
_____Model/...
_____View/...
_____router.json
Modules/Backend
_____Controller/...
_____Model/...
_____View/...
_____router.json

Что мне необходимо реализовать?

Для начала я создал функцию, которая сканирует папку модулей и получает роутер каждой из папок, но проблема в следующем, функция записывает пути к каждому пути роутера, но когда возвращает мне результат стирает массив и мне приходит пустой массив. Это происходит из-за того, что в начале функции определен массив `let list = []` - то есть пустой массив, без этого функция попросту не работает.

Вот весь код самой функции:

function Search(startPath){
		// Название файла роутера
		let filter = 'route.json';
		let list = [];

		// Проверка, если имя папки не задано, то присваиваем ей нужное имя
		if(startPath === undefined)
			startPath = 'Modules';
		
		// console.log(`Проверка директории: ${startPath}, файл не найден.`);

		// Проверка на ошибку, есть ли такая директория.
		if (!fs.existsSync(startPath)){
			console.log("Нет такой директории: ",startPath);
			return;
		}

		// Цикл поиска файла
		let files = fs.readdirSync(startPath);
		for(let i=0; i<files.length; i++) {
			let filename=path.join(startPath,files[i]);
			let stat = fs.lstatSync(filename);
			// Если файл не найден, то запускаем цикл повторно
			if (stat.isDirectory()) {
				this.Search(filename,filter);
			}
			// Если файл найден, кладем его в массив.
			else if (filename.indexOf(filter)>=0) {
				list = [filename];

			}
		}
		return list;
	}


На выходе мне нужно получить пути ко всем роутерам, либо "склеить" все файлы роутеров в один и отдать массив на выходе.

Как подобное можно реализовать?
  • Вопрос задан
  • 345 просмотров
Пригласить эксперта
Ответы на вопрос 2
@SANTA2112
child_process.execSync(`find ${process.cwd()}/Modules -type f`).toString().split('\n')


Либо можно взять https://www.npmjs.com/package/glob
Ответ написан
Комментировать
@historydev Куратор тега JavaScript
Острая аллергия на анимешников
Вынесите переменную с массивом в глобалку(за функцию) и используйте промис

let list

const your_function = () => {
  return new Promise((resolve,reject) => {
    //your code

   resolve(list)
  })
}

const myList = your_function() //Array
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы