节点请求包使用[object%20Object]

时间:2017-10-30 14:41:40

标签: javascript node.js http

我见过与其他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]?我做错了什么?

2 个答案:

答案 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;},

看到我删除了两个参数之间的空格。这是一个很长的镜头,如果这是一个可怕的错误。