NodeJS - ERR_INVALID_ARG_TYPE Ошибка при отправке HTTP-запроса на удаленный хост - PullRequest
0 голосов
/ 03 сентября 2018

Недавно я столкнулся с проблемой при попытке отправить запрос, используя NodeJS и request-обещание .

Следующий код вложен в групповой вызов для загрузки файла (с использованием вложенных функций / кластеров.

    const options = {
        method: 'POST',
        uri: 'URL of your choice',
        body: {
            //Body of the request
        },
        // json: true,
        headers: {
            // 'Content-Type': 'application/x-www-form-urlencoded',
        },
    }

    request(options)
        .then(function (response) {
            console.log('Response: ', response);

        })
        .catch(function (err) {
            console.log('Error: ', err);
        });

При использовании текущего запроса без свойства 'json: true' (закомментировано) я получаю следующую ошибку:

TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer. Received type object
    at write_ (_http_outgoing.js:603:11)
    at ClientRequest.write (_http_outgoing.js:575:10)
    at Request.write (PATH/node_modules/request/request.js:1500:27)
    at end (PATH/node_modules/request/request.js:549:18)
    at Immediate.<anonymous> (PATH/node_modules/request/request.js:578:7)
    at runCallback (timers.js:696:18)
    at tryOnImmediate (timers.js:667:5)
    at processImmediate (timers.js:649:5)
    at process.topLevelDomainCallback (domain.js:121:23)

И когда я включаю опцию 'json: true', проблема не возникает, но удаленный API возвращает ошибку, так как он плохо обрабатывает запросы JSON / их добавленные фигурные скобки.

Есть какие-нибудь идеи по поводу этой проблемы?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Решил!
Поскольку удаленный хост плохо обрабатывает JSON и требует отправки «обычного» POST-запроса, я снова заглянул в документацию запроса-обещания. Изменяя body{} на formData{} и комментируя json: true, проблема была решена.

const options = {
    method: 'POST',
    uri: 'URL of your choice',
    formData: {
        //Request's data
    },
}

request(options)
    .then(function (response) {
        console.log('Response: ', response);

    })
    .catch(function (err) {
        console.log('Error: ', err);
    });
0 голосов
/ 05 сентября 2018

Попробуйте ниже -

url = "your url"
const options = {
  url: url,
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Accept-Charset': 'utf-8'
  },

  body: {

  }
};
request.post(options, function (err, response, body) {
      // do something with your data
console.log(response.statusCode);
console.log(body)
});
...