当我尝试发送发布请求时,使用通过npm安装的请求承诺模块,我收到一个错误,并且我无法弄清原因。
我尝试删除部分选项和标题,但说实话,我只是被卡住了。
function sendData() {
var options = {
method: 'POST',
uri: `http://www.myurl.com/placeholder.json`,
body: {
"data":"desiredData"
},
headers: {
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US,en;q=0.9",
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
"X-Requested-With": "XMLHttpRequest"
}
}
rp(options)
.then(function (parsedBody) {
console.log(parsedBody)
})
.catch(function (err) {
console.log(err)
});
}
sendData();
应该发送一个发布请求并记录返回的json,但我收到以下错误:
_http_outgoing.js:654
throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'first argument',
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer
at write_ (_http_outgoing.js:654:11)
at ClientRequest.write (_http_outgoing.js:629:10)
at Request.write (C:\Users\ninja_000\Desktop\TronJS\node_modules\request\request.js:1500:27)
at end (C:\Users\ninja_000\Desktop\TronJS\node_modules\request\request.js:549:18)
at Immediate.<anonymous> (C:\Users\ninja_000\Desktop\TronJS\node_modules\request\request.js:578:7)
at runCallback (timers.js:756:18)
at tryOnImmediate (timers.js:717:5)
at processImmediate [as _immediateCallback] (timers.js:697:5)
答案 0 :(得分:0)
尝试更改内容类型
function sendData() {
var options = {
method: 'POST',
uri: `http://www.myurl.com/placeholder.json`,
body: {
"data":"desiredData // this should be a JSON format if you are using
//application/json
},
headers: {
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US,en;q=0.9",
"Connection": "keep-alive",
"Content-Type": "application/json",
"X-Requested-With": "XMLHttpRequest"
}
}
rp(options)
.then(function (parsedBody) {
console.log(parsedBody)
})
.catch(function (err) {
console.log(err)
});
}
答案 1 :(得分:0)
在错误消息中,它说明了参数错误,因此请在sendData()
函数中检查代码的正文部分。
尝试一下
function sendData() {
var options = {
method: 'POST',
uri: 'http://www.myurl.com/placeholder.json',
body: {
data:'desiredData'
},
headers: {
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US,en;q=0.9",
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
"X-Requested-With": "XMLHttpRequest"
}
}
rp(options)
.then(function (parsedBody) {
console.log(parsedBody)
})
.catch(function (err) {
console.log(err)
});
}
我编辑您代码的第六行。
答案 2 :(得分:0)
我创建了此示例,以便了解request-promise
的功能。
为数据设置option.body
,并为json: true
设置正文为JSON。
我使用一个简单的在线伪造REST API服务器,因此您可以运行示例而无需进行任何更改。
const rp = require('request-promise');
function sendData() {
var options = {
method: 'POST',
uri: 'https://jsonplaceholder.typicode.com/posts',
body: {
title: 'foo',
body: 'bar',
userId: 1
},
headers: {
"Content-type": "application/json; charset=UTF-8"
},
json: true // Automatically stringifies the body to JSON
};
rp(options)
.then((parsedBody) => {
console.log(parsedBody);
})
.catch((err) => {
console.log(err);
});
}
sendData();
答案 3 :(得分:0)
我设法解决了这个问题,首先我在标题下添加了json: true
,然后导致了上面发布的另一个错误。为了解决这个问题,由于所有人的帮助,我还不得不将内容类型更改为application/json
。
答案 4 :(得分:0)
data:“ desiredData”应该是数据:desireData,其中desiredData是一个json对象。例如:
var desiredData = { propertyName: propertyValue }