NodeJS - ERR_INVALID_ARG_TYPE Ошибка при отправке HTTP-запроса на удаленный хост
Недавно я столкнулся с проблемой при попытке выполнить запрос с использованием 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 ответа
Решил это!
Поскольку удаленный хост плохо обрабатывает 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);
});
Попробуйте ниже -
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)
});
Я столкнулся с аналогичной проблемой, в моем случае каталог загрузки был неправильно определен, убедитесь, что путь, по которому вы хотите загрузить файл, существует и четко определен.