如何在查询字符串中发送javascript对象?

时间:2016-12-29 23:02:52

标签: javascript express query-string

我想在查询字符串中发送此javascript对象,以便在服务器接收时可以将其用作对象。目前,我正在使用xhr请求:

        const xhr = new XMLHttpRequest();
        var params = {
            searchParams: {name: 'Joe'},
            sortParam: {name: -1},
            skip: 0,
            limit: 50
        };
        xhr.open('get', '/api/endpoint' + formatParams(params));
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        xhr.responseType = 'json';
        xhr.addEventListener('load', () => {
            if (xhr.status === 200) {
                ...
            }
            else{
                ...
            }
        });
        xhr.send();

其中formatParams函数如下:

const formatParams = ( params ) => {
    return "?" + Object
            .keys(params)
            .map(function(key){
                return key+"="+params[key]
            })
            .join("&")
};

在服务器上,我通过Express Router接收请求,其中的参数随后在MongoDB查询中使用:

const express = require('express');
const router = new express.Router();
router.get('/endpoint', (req, res) => {
    console.log(req.query.searchParams);
    ...
});

目前,服务器将req.query.searchParams显示为字符串

  

[object Object]

1 个答案:

答案 0 :(得分:1)

这里有一些问题:

  1. keyparams[key]应该进行网址编码,您可以使用encodeURIComponent(...)(它是标准函数)
  2. 由于params[key]是两种情况下的对象(searchParam,sortParam),因此字符串表示将是[Object object]。而是尝试:return encodeURIComponent(key) + '=' + encodeURIComponent(JSON.stringify(params[key]))
  3. 在服务器端,您可能需要运行JSON.parse(req.query.searchParams)才能恢复对象