У меня есть рабочий процесс, в котором пользователи могут создавать сообщения и редактировать сообщения. Я использую Filepond для отображения файлов, когда пользователь редактирует сообщение. Я делаю GET-запросы для получения файлов, связанных с этим сообщением c. Я установил свой маршрут API ExpressJS для этой выборки следующим образом:
router.get(
"/edit/:id/post-files",
passport.authenticate("jwt", { session: false }),
async (req, res, next) => {
const errors = {};
Post.findById(req.params.id).then(post => {
if (post.user == req.user.id) {
if (!post) {
errors.nopost = "There is no post file";
return res
.status(404)
.json(errors)
.end();
}
try {
if (post.postFiles) {
post.postFiles.map(file => {
fs.readFile(file.postFilePath, "base64", (err, data) => {
res.set("Content-Type", file.fileType);
return res.send(data);
});
});
}
} catch (err) {
res
.status(400)
.json({ noFileFound: "File was not found" })
.end();
}
} else {
res
.status(400)
.json({ notAuthorized: "You are not authorized" })
.end();
}
});
});
Я не могу читать несколько файлов через fs.readFile
, я считаю, что мне нужно создать обещание для этого но из-за отсутствия опыта / знаний я не мог об этом позаботиться.
Так, кстати, выглядит объект post.postFiles
:
{ uploadedBy: { userId: xxxxxxx, name: 'Xxxx Xxxxxx' },
date: 2020-05-07T08:04:06.374Z,
_id: xxxxxxxxxxxxxxxxxxx,
postFilePath:
'post_files/2020-05-07T08:04:06.282Z93292137_2865616126820580_7650583162275233792_n.jpg',
fileName: '93292137_2865616126820580_7650583162275233792_n.jpg',
fileType: 'image/jpeg' }
{ uploadedBy: { userId: Xxxxxxxxxxxxxxxx, name: 'Xxxxx Xxxxx' },
date: 2020-05-07T08:04:06.374Z,
_id: xxxxxxxxxxxxxxxx,
postFilePath:
'post_files/2020-05-07T08:04:06.282Z94149024_1376513669200115_4087337221017829376_n.jpg',
fileName: '94149024_1376513669200115_4087337221017829376_n.jpg',
fileType: 'image/jpeg' }
Правильно ли такой подход? Если да, то как я могу завершить это обещанием? Или есть лучший способ справиться с этим?
Спасибо.