Итак, вот самое простое решение, которое я могу найти самостоятельно!
@ Ответ PeterN верен, но может быть трудно обернуть голову новичка!
Вот мой окончательный код.
const express = require("express");
const fs = require("fs").promises; // !IMPORTANT Get the promises version of the File System Module
const path = require("path");
const os = require("os");
// Initialize Express
const app = express();
// PORT on which the app process should be started
const PORT = process.env.PORT || 5100;
// Setting Up the path to Projects folder dynamically
// !Currently only works(tested) on the Darwin(MacOS) systems PS. I don't own a Windows
// TODO: Test on Windows and Linux
const homedir = os.homedir();
const dir = `${homedir}/Projects/`;
// Home Route
app.get("/", async (req, res) => {
let folders = [];
// TODO: Proceed only if the path is correct and is a directory
try {
let files = await fs.readdir(dir);
for (let i = 0; i < files.length; i++) {
let file = await fs.lstat(path.join(dir, files[i]));
if (file.isDirectory()) {
folders.push(files[i]);
}
}
} catch (error) {
console.error(error);
}
res.send(folders);
});
// Start the express server
app.listen(PORT, err => {
if (err) throw err;
console.log(`Project Lister Running On PORT: ${PORT}`);
});
Обратите внимание, что во второй строке, где я импортирую модули 'fs', я импортирую его по-другому, или, скорее, скажу другую версию!
Iтеперь импортируйте его как:
const fs = require("fs").promises;
.Прочис, добавленный в последний раз, импортирует функции, методы этого модуля в их реализацию на основе Promise.Думаю, вы должны заметить, что он стабилен только в версии 11.x и выше на NodeJ на данный момент.Я использую> 12.x.
Теперь остальная часть процесса довольно проста, если вы знакомы с Async / Await и Promises.А если нет, я бы настоятельно рекомендовал вам заняться этим, поскольку это может спасти ваш день, как это было со мной.
Вот отличное руководство по этому вопросу: Async / Await и Promise в JS
Ps.Используйте цикл for вместо 'array.forEach (e => // Do Something);'подход, поскольку он снова будет представлять ту же проблему, с которой сталкивался ранее, потому что он также основан на обратном вызове!
Надеюсь, я вам помог.Спасибо!