смог найти решение.
                  
                  
                  
                  
                  
                  Есть запрос от клиента:
                  
                  
                  const fetchFileById = async ({ mediaId }: FetchFileByIdProps) => {
                  
                  
                    const { data } = await axios.get(/api/media-file?id=${mediaId}, {
                  
                  
                      responseType: "arraybuffer",
                  
                  
                      headers: {
                  
                  
                        "Content-Type": "audio/mpeg",
                  
                  
                        Accept: "audio/mp3",
                  
                  
                      },
                  
                  
                    });
                  
                  
                  
                  
                  
                    return data;
                  
                  
                  };
                  
                  
                  
                  
                  
                  
                  
                  
                  Сервер отдает файл так:
                  
                  
                  fs.readFile(__dirname + mediaURL, (err, data) => {
                  
                  
                    return res.writeHead(200, { "Content-type": "audio/mpeg" }).end(data);
                  
                  
                  });
                  
                  
                  
                  
                  
                  Каким образом можно получить данные не в формате "arraybuffer", а, например, JSON.
                  
                  
                  Скажем, сообщение, что файл не найден или недоступен для пользователя, типа такого:
                  
                  
                  if (mediaMetadata.isProtected) {
                  
                  
                    return (
                  
                  
                      res
                  
                  
                        .json({ message: "Requested media file is protected" })
                  
                  
                    );
                  
                  
                  }
                  
                  
                  
                  
                  
                  Если я возвращаю JSON, то он все равно принимается как "arraybuffer" и я не могу отобразить его.
                  
                  
                  
                  
                  
                  Как поступить?
                  
                  
                
не думаю что у вас получиться одновременно сделать чтобы axios и arraybuffer считывал, и json решение - парсить сам arraybuffer на предмет JSON
а еще проще использовать статус коды 404 - not found 403/401 - file is protected
Я тоже об этом думал сначала, но хотел узнать, если ли вариант с двумя форматами. Спасибо за помощь!
Обсуждают сегодня