req.query对象中的多余引号

问题描述 投票:0回答:1

我对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: '10' }但是,当我尝试发送嵌套对象时: Users.query({a: 'some text', b: {first: 10, second: 20}})在服务器上,我得到带有多余引号和无效对象的结果: Query - { a: 'some text', b: '{"first":10,"second":20}' } 。 结果,我不能将其用于猫鼬查询。 当我等待{$text:{"$search":"admin"}}我收到了{$text:'{"$search":"admin"}'} 。 有人可以面对这个问题吗? 谢谢您的帮助

javascript angularjs node.js express
1个回答
0
投票

JSON / Object到QueryString以及向后转换有很多问题。 嵌套,数组,“空”,布尔值等。您刚遇到一个。

最简单的解决方案是将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);
      }
   }
});
© www.soinside.com 2019 - 2024. All rights reserved.