【发布时间】:2017-08-31 07:46:46
【问题描述】:
我目前正在处理一个需要发送自定义 GET HTTP 请求的项目。
我正在使用默认的查询字符串生成器:the Documentation
const querystring = require('querystring');
问题在于对象(可能也用于空数组),例如
extendTypes={}
被序列化为:
extendTypes=
预期结果:
extendTypes={}
或其 URI 编码版本:
extendTypes%3D%7B%7D
那么,我怎么能希望这样做呢?如果内置模块是不可能的,哪一个可以做我想做的。
如果需要,这是我的完整代码:
function generateGetRequest(dataMap, url) {
let queryParams = {};
let uriParams = {};
for (let [key, value] of dataMap) {
// if value is an object or an array
if (value instanceof Object || value instanceof Array) {
uriParams[key] = value;
} else {
// param working for superagent
queryParams[key] = value;
}
}
let queryParamsUri = querystring.stringify(uriParams);
console.log(queryParamsUri);
let finalUrl = url + ( (Object.keys(uriParams).length > 0) ? "?" + queryParamsUri : "");
}
【问题讨论】:
-
你的
querystring是一个对象吗? -
它是一个内置的节点模块:nodejs.org/api/querystring.html
-
根据文档,如果查询字符串包含任何空参数,它将以
someVar=出现。 (例如,querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' })将返回'foo=bar&baz=qux&baz=quux&corge='(在此处查看corge值)。 -
有什么办法绕过这个默认设置?内部文档没有任何迹象
-
无关提示:如果您首先检查
instanceof Object,则拥有instanceof Array是没有用的,因为数组是Object的实例。
标签: node.js query-string stringify superagent