req.query对象中的额外引号

时间:2016-10-25 08:18:22

标签: javascript angularjs node.js express

我在req.query对象中有额外引号的问题。我使用Angular.JS(1.5.8)和NodeJS(6.2.0)。 所以我的意思是: 在客户端,我有简单的REST api

.factory('Users', function ($resource) {
   var Users = $resource("api/users/" + ":_id", { _id: "@_id" }, {update: {method: 'PUT'}, query:{ method: "GET", isArray: false }});
   return Users;
 })

并像这样使用

return Users.query({a: 'some text', b: 10}}).$promise.then(function(results){
            return results.users;
        });

一切正常,在服务器上我得到结果console.log('Query parsing - ', req.query); - Query - { a: 'some text', b: '10' } 但是当我尝试发送嵌套对象时:  Users.query({a: 'some text', b: {first: 10, second: 20}}) 在服务器上,我有结果有额外的引号和对象无效:Query - { a: 'some text', b: '{"first":10,"second":20}' }。 结果我不能将它用于mongoose查询。当我等待{$text:{"$search":"admin"}}时,我已经复活了{$text:'{"$search":"admin"}'}。 以前有人可能会遇到这个问题。谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

JSON / Object to QueryString和back转换有很多问题。嵌套,数组," null",布尔值等。你刚刚遇到一个。

最简单的解决方案是将JSON.stringify()个对象作为查询字符串值:

url = 'www.example.com' + '/resource' + '?json=' + JSON.stringify(dataObject);

浏览器会自动对JSON字符串进行URL编码。在其他客户端上,您可能需要手动完成。

您可以在服务器上解析它。例如,这个expressjs中间件:

app.use(function(req, res, next){
   if(req.query.json){
      try {
        req.query.json = JSON.parse(req.query.json);
        next();
      }catch(err){
        next(err);
      }
   }
});