引号"/>
req.query对象中的多余引号
我对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"}'}
。 有人可以面对这个问题吗? 谢谢您的帮助
JSON / Object到QueryString以及向后转换有很多问题。 嵌套,数组,“空”,布尔值等。您刚遇到一个。
最简单的解决方案是将JSON.stringify()
对象作为查询字符串值:
url = 'www.example' + '/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);
}
}
});
更多推荐
req.query对象中的多余引号
发布评论