expressjs / nodejs отправка нескольких файлов клиенту через запрос GET - PullRequest
0 голосов
/ 07 мая 2020

У меня есть рабочий процесс, в котором пользователи могут создавать сообщения и редактировать сообщения. Я использую 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' }

Правильно ли такой подход? Если да, то как я могу завершить это обещанием? Или есть лучший способ справиться с этим?

Спасибо.

...