我的NodeJS / Koa.js应用程序遇到一个奇怪的问题,我正在做的HTTP请求返回时出现此错误消息:
{"Message":"The request entity's media type 'application/x-www-form-urlencoded' is not supported for this resource."
现在,当我使用邮递员发出相同的请求时,我得到了正确的结果,所以我推断出我的代码中存在错误。我似乎无法弄明白。这是我的代码来发出请求和有效负载。
// Content Type
if(options.contentType === 'json') {
headers['Content-Type'] = 'application/json';
}
// Content Length
if(options.contentLength) {
reqHeaders['Content-Length'] = options.contentLength
}
if(headers) {
for(let key in headers) {
if(!headers.hasOwnProperty(key)) {
continue;
}
reqHeaders[key] = headers[key];
}
}
const payload = {
headers : reqHeaders,
url : url,
method : requestType,
timeout : 10000,
form : vars,
followRedirect: true,
maxRedirects: 10,
body : '' || options.body
};
return new Promise(function(resolve, reject) {
request(payload, function(error, response, body) {
if(response) {
if(!error && response.statusCode === 200) {
resolve(response, body);
} else {
if(response.statusCode === 401) {
console.log('token expired');
}
reject(response, body);
}
}
});
});
有效载荷:
{
"headers": {
"Cookie": "XDEBUG_SESSION=PHPSTORM",
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWdvdWxkLWxvZ2luLmRldiIsImFjY291bnQiOiI1OTY3NmFmZmYyOWE1NWI2MTViOWFiMWEiLCJhdXRoTGV2ZWwiOjAsImlhdCI6MTUwNTg5OTQ3MX0.r-XaeTsQTjSkab9SNjrHgnh6lrgNP0uJCaDIV22A6gM",
"Content-Type": "application/json"
},
"url": "http://54.***.***/api/Report/History",
"method": "POST",
"timeout": 10000,
"form": {
"AccountId": "59676afff29a55b615b9ab1a",
"StartDate": "2017-09-19T10:11:47.0266607+00:00",
"EndDate": "2017-09-19T10:11:47.0266607+00:00",
"VIN": "SALLAK"
},
"followRedirect": true,
"maxRedirects": 10
}
正如您所看到的,我在头文件对象中有正确的Content-Type标头,它位于我传递给请求函数的有效负载中,但它仍然看起来像是以x-www-form-encoded方式发送。任何人都可以看到这里可能出现的问题吗?
由于
答案 0 :(得分:5)
docs读取:
- form - 当传递一个对象或一个查询字符串时,它将body设置为值的查询字符串表示,并添加Content-type: application / x-www-form-urlencoded header。
和
- json - 将body设置为值的JSON表示,并添加Content-type:application / json header。
您正在使用RxJS
,因此会覆盖标题。请尝试使用form
。无论如何它都会覆盖你的标题,但价值将是' application / json'哪个应该没问题。
答案 1 :(得分:1)
如果我可以提出几点建议:
x[1..-1]
将会处理正确的内容类型标题。如果要返回承诺,请考虑使用启用了json: true
的请求承诺来检查令牌过期。
fullResponse