Как отправить клиенту файл с несколькими изображениями с экспресс-сервера? - PullRequest
0 голосов
/ 28 мая 2019

В моем бэкэнде (сборка по экспресс) я сохранял изображение пользователя в MongoDB с использованием gridfs. Теперь для целей тестирования я хочу проверить, все ли изображения загружены или нет в клиенте. По приведенному ниже коду я смог получить одно изображение:

// http://localhost:3000/avater/avatar1 (api call)
 app.get('/avater/:filename', (req, res) => {
      if (req.params) {
        gfs.files.findOne({ filename: req.params.filename }, (err, files) => {
          // Error checking
          if (!files || files.length === 0) {
            return res.status(404).json({
              responseCode: 1,
              responseMessage: 'error'
            });
          }

          var readstream = gfs.createReadStream({
            filename: files.filename
          });
          // set the proper content type
          res.set('Content-Type', files.contentType);
          // Return response
          return readstream.pipe(res);
        });
      } else {
        return res.status(404).json({ error: 'username is not corrent' });
      }
    });

Теперь я просто хотел отобразить все пользовательские аватары в браузере. Я не знаю, как отправить несколько изображений из gridfs к клиенту. Вот как я написал код ниже. Но с ошибками:

(узел: 16704) MaxListenersExceededWarning: Возможная память EventEmitter обнаружена утечка. Добавлено 11 близких слушателей. Используйте emitter.setMaxListeners () увеличить лимит

//  http://localhost:3000/allavater (api url)
 app.get('/allavater', (req, res) => {
      let count = 0;
      let filesData = [];
      gfs.files.find({  }).toArray((err, files) => {
        // Error checking
        if (!files || files.length === 0) {
          return res.status(404).json({
            responseCode: 1,
            responseMessage: 'error'
          });
        }
        // Loop through all the files and fetch the necessary information
        files.forEach(file => {
          filesData[count++] = {
            filename: file.filename,
            contentType: file.contentType
          };
        });
        return filesData.map(file => {
          var readstream = gfs.createReadStream({
            filename: file.filename
          });
          // set the proper content type
          res.set('Content-Type', file.contentType);
          // Return response
          return readstream.pipe(res);
        });
      });
    });

Как я могу отправить все изображения клиенту, где браузер отобразит все изображения, хранящиеся в монго? Кроме того, есть ли возможность создать ссылку для каждого изображения, чтобы я мог отобразить их позже в моем проекте Angular?

...