Вы можете использовать встроенную поддержку обещаний для библиотеки fs
, а также, чтобы избежать двойного вложенности l oop, вы можете поместить список файлов в Set
для более эффективной проверки каждого элемента:
const fsp = require('fs').promises;
app.get('/api/album', async (req, res) => {
let matches = [];
try {
let albums = await Album.find({});
let files = await fsp.readdir('./static/img/album-art/');
let filesSet = new Set(files);
let matches = [];
for (let item of albums) {
if (filesSet.has(item.coverUrl)) {
matches.push(item.name);
}
}
res.json(matches);
} catch(e) {
console.log(e);
res.sendStatus(500);
}
});
Исходя из вашего кода, я предполагаю, что item.coverUrl
на самом деле является просто базовым именем файла, таким как mysong.jpg
, а не фактическим URL, потому что фактический полностью определенный URL никогда не будет совпадать с одним из имен файлов .
К вашему сведению, вам не нужна ни одна из проверок undefined
. Массив files
никогда не будет содержать значений undefined
, поэтому, даже если item.coverUrl
равен undefined
, он никогда не будет соответствовать одному из файлов, поэтому он позаботится о себе таким образом, поскольку он просто никогда не будет совпадать.