我在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"}'}
。
以前有人可能会遇到这个问题。谢谢你的帮助
答案 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);
}
}
});