我见过与其他javascript库类似的问题,但没有解决这个特定的包。我正在使用节点请求库(节点版本8.0.0,请求版本2.83.0)。我正在尝试向请求添加查询字符串,它在路径中使用[object%20Object]
对查询字符串进行编码。以下是请求的确切代码:
request=require('request')
request({
method: 'POST',
url: 'http://localhost:8091/',
qs: {param1:'value1', param2:'value2'},
headers: {
'Content-type': 'application/json'
}
},
function(err, resp){
console.log(resp)
}
);
这是输出的一个片段(它真的很长,所以我只是在相关部分粘贴)。
_trailer: '',
finished: true,
_headerSent: true,
socket: [Object],
connection: [Object],
_header: 'POST /?param1=value1[object%20Object]param2=value2 HTTP/1.1\r\nContent-type: application/json\r\nhost: localhost:8091\r\ncontent-length: 0\r\nConnection: close\r\n\r\n',
_onPendingData: [Function: noopPendingOutput],
agent: [Object],
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/?param1=value1[object%20Object]param2=value2',
_ended: true,
res: [Circular],
aborted: undefined,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
[Symbol(outHeadersKey)]: [Object] },
ntick: true,
response: [Circular],
originalHost: 'localhost:8091',
originalHostHeaderName: 'host',
responseContent: [Circular],
_destdata: true,
_ended: true,
_callbackCalled: true },
toJSON: [Function: responseToJSON],
caseless:
Caseless {
dict:
{ 'x-powered-by': 'Express',
'content-security-policy': 'default-src \'self\'',
'x-content-type-options': 'nosniff',
'content-type': 'text/html; charset=utf-8',
'content-length': '140',
date: 'Mon, 30 Oct 2017 14:37:30 GMT',
connection: 'close' } },
read: [Function],
body: '<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>Error</title>\n</head>\n<body>\n<pre>Cannot POST /</pre>\n</body>\n</html>\n' }
请注意,在path
字段等多个位置,'/?param1=value1[object%20Object]param2=value2'
表示如何。据我所知,我正确地提交了查询参数。为什么要添加[object%20Object]
?我做错了什么?
答案 0 :(得分:0)
所以我想出了一个解决方法。我没有尝试将查询字符串放入qs
参数,而是直接将其直接放入URL中。像这样:
request=require('request')
querystring = require('querystring')
request({
method: 'POST',
url: 'http://localhost:8091/?' + querystring.stringify({ param1:'value1', param2:'value2' }),
headers: {
'Content-type': 'application/json'
}
},
function(err, resp){
console.log(resp)
}
);
这可能是我们应该解决的一个巨大的错误。使用请求库向其他人发出警告。 不要使用&#34; QS&#34;字段指定您的查询字符串。如果您提供的参数超过一个参数,则无法使用。
答案 1 :(得分:-1)
你试过这个:
{参数1:&#39;值1&#39;,参数2:&#39;值2&#39;},
看到我删除了两个参数之间的空格。这是一个很长的镜头,如果这是一个可怕的错误。