Как использовать суперагент для отправки объекта FormData - PullRequest
0 голосов
/ 14 февраля 2019

Я делаю запрос API, за которым следует другой запрос на другой сервер, на который мне нужно передать файл.

Выполнение первого - это удобно и легко.Это выглядит примерно так:

if (myFile) {
    const data = new FormData()
    data.append('myFile', myFile, myFile.name)
    myFile = data
  }

isomorphicFetch(`${MY_ENDPOINT}`, {
        method: 'PATCH',
        body: myFile
      })

Теперь, на стороне сервера, мне нужно передать это на другой сервер.Для которого я использую суперагент.Однако я, кажется, теряю файл в процессе.Вот как в настоящее время выглядит код:

const fileField = Object.keys(data).pop()
if (fileField === 'myFile') {
  res = await request
    .patch(`${MY_OTHER_ENDPOINT}`)
    .send(data)
    .query(query)
}

Обратите внимание, что data - это тело предыдущего запроса, а объект FormData отображается как пустой объект, поэтому я не уверенчто делать отсюда.

На моем другом сервере мой файл возвращается как undefined, однако, если я делаю запрос прямо от клиента, он проходит, как и ожидалось.Так как же переслать объект FormData из одного серверного приложения в другое?

1 Ответ

0 голосов
/ 14 февраля 2019

Файлы обычно отправляются на серверы как часть многокомпонентного запроса.

Суперагент поддерживает многокомпонентные запросы, например так:

request
  .post('/upload')
  .attach('image1', 'path/to/felix.jpeg')
  .attach('image2', imageBuffer, 'luna.jpeg')
  .field('caption', 'My cats')
  .then(callback);

Дополнительную информацию можно найти в их документации: Дополнительные документы - составные запросы

В вашем примере вы хотите убедиться, что ваш сервер получает файл, а затем с помощью функции attach поместите файл в ваш запрос.

...