NodeJs:用空对象绕过querystring.stringify的任何方法?

时间:2017-04-05 15:26:21

标签: node.js query-string stringify superagent

我目前正在处理一个需要发送自定义GET HTTP请求的项目。

我正在使用默认的查询字符串构建器:the Documentation

const querystring = require('querystring');

问题出在Object(可能也是空数组),例如

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 : "");
}

1 个答案:

答案 0 :(得分:0)

如果有人想知道,我终于找到了解决方法:

let request = require("superagent");

function generateGetRequest(dataMap, url) {

    let queryParams = {};
    let queryParamsUri = "";
    let isFirstParam = true;

    for (let [key, value] of dataMap) {

        // if value is an object or an array
        if (value instanceof Object) {

            // Workaround for empty object or array = https://github.com/nodejs/node/issues/12234
            queryParamsUri += ((!isFirstParam) ? "&": "") + key + "=" + JSON.stringify(value);
            // for next call
            isFirstParam = false;
        } else {
            // param working for superagent
            queryParams[key] = value;
        }
    }

    let finalUrl = url + ( (!isFirstParam) ? "?" + queryParamsUri : "");
    return request
        .get(finalUrl)
        .query(queryParams);
}