Запрос POST с данными формы завершается ошибкой после переключения с запроса-обещания на выборку узла - PullRequest
0 голосов
/ 01 августа 2020

Я заменил request-promise на node-fetch. Все работает хорошо, за исключением одного запроса, который отправляет данные формы в конечную точку, которую я, к сожалению, не могу здесь предоставить. Это код, который работает с request-promise:

const options = {
    method: 'POST',
    uri: keys.endpointUrl,
    formData: {
        operations: JSON.stringify(operations),
        map: JSON.stringify(map)
    },
    json: true
};

const response = await request(options);

После перехода на node-fetch это выглядит так:

const FormData = require('formdata-node');

const form = new FormData();

form.set('operations', JSON.stringify(operations));
form.set('map', JSON.stringify(map));

const opts = {
    method: 'POST',
    body: form
};

const res = await fetch(keys.endpointUrl, opts);

console.log(res);

const response = res.json();

res регистрируется как:

Response {
  size: 0,
  timeout: 0,
  [Symbol(Body internals)]: {
    body: PassThrough {
      _readableState: [ReadableState],
      readable: true,
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      _writableState: [WritableState],
      writable: false,
      allowHalfOpen: true,
      _transformState: [Object],
      [Symbol(kCapture)]: false
    },
    disturbed: false,
    error: null
  },
  [Symbol(Response internals)]: {
    status: 500,
    statusText: 'Internal Server Error',
    headers: Headers { [Symbol(map)]: [Object: null prototype] }
  }
}

Я пытался добавить разные заголовки, но, к сожалению, это не помогло. Что мне не хватает?

NodeJS: v12.16.1 node-fetch: 2.6.0

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Думаю, вам нужно установить заголовок content-type на x-www-form-urlencoded, чего, вероятно, ожидает ваша конечная точка. Примечание в документации :

Заголовок Content-Type автоматически устанавливается на x- www-form-urlencoded только тогда, когда экземпляр URLSearchParams указан как таковой:

0 голосов
/ 01 августа 2020

Вам не нужны FormData, если вы не загружаете файлы

const fetch = require('node-fetch');

var form = {
  "operations": JSON.stringify(operations),
  "map": JSON.stringify(map)
}

const opts = {
    method: 'POST',
    body: form
};

const res = await fetch(keys.endpointUrl, opts);
...