最近,我在尝试使用NodeJS和request-promise发出请求时遇到问题。
以下代码嵌套在用于文件上传的multer调用中(使用嵌套函数/集群。
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请求/它们很好地添加了花括号而返回错误。
关于解决此问题的任何想法吗?
谢谢。
答案 0 :(得分:0)
尝试以下-
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)
});
答案 1 :(得分:0)
解决了!
由于远程主机不能很好地处理JSON,并且需要发送“常规” POST请求,因此我再次查看了request-promise的文档。
通过将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);
});
答案 2 :(得分:0)
我遇到了类似的问题,对于我来说,上载目录没有正确定义,请确保要上载文件的路径存在并且定义明确