Код:
function getLocalFiles() {
let files = [];
return new Promise((resolve, reject) => {
fs.readdir('storage', (err, filenames) => {
if (err)
throw err;
filenames.forEach((filename) => {
fs.readFile('storage/' + filename, 'utf-8', (err, data) => {
if (err)
throw err;
const file = {
filename: filename,
content: data
};
files.push(file);
//console.info(files); I checked that array has a files but then it returns empty
});
});
});
resolve(files);
})
}
api.get('/', async (req, res) => {
const files = await getLocalFiles();
res.send('local files:\n' + files);
})
У меня есть несколько файлов в каталоге «хранилище», и я объявил функцию getLocalFiles(), которая считывает имя и содержимое каждого файла в этом каталоге и помещает его в массив «файлы». Но вместо этого я получил пустой массив. Почему файлы не записываются в массив?
Несколько указателей:
fs/promises
)./
не будет сокращать его, поэтому используйте вместо него path.join('storage', filename)
const fs = require('fs/promises');
async function getLocalFiles() {
let files = [];
const dir = await fs.readdir('storage')
for (const filename of dir) {
files.push({
filename,
content: await fs.readFile('storage/' + filename, 'utf-8')
})
}
return files;
}
api.get('/', async (req, res) => {
const files = await getLocalFiles();
res.send('local files:\n' + files);
})
Вы можете использовать функцию readdirSync, чтобы быстро решить эту проблему geeksforgeeks.org/node-js-fs-readdirsync-метод.