Breeze Json uriBuilder

时间:2015-02-19 20:17:12

标签: node.js sails.js breeze waterline

我正在尝试将breeze.js与sails.js一起使用。

因此我正在使用breeze json uriBuilder。 我记录了req.query并获得了以下内容:

{ '{"where":{"name":"foo"},"orderBy":': { '"name"': '' } }

要查询水线对象,我需要将其格式化为:

{ where: { name: 'foo' }, sort: 'name' }

我尝试过的第一件事:

var queryString = JSON.parse(Object.keys(req.query)[0]);

只要我只放入一个where子句,它就可以工作。但是有了更多的参数,我得到了这个奇怪格式的json对象。 如何解析它以获得正确的对象?

解决方案:

不要解析他的请求。解析url并解析它。这样你就会得到一个风帆接受的json uery。现在剥离不受支持的参数作为选择,你就完成了。

var parsedUrl = urlUtils.parse(req.url, true);

var jsonQueryString = Object.keys(parsedUrl.query)[0];
var jsonQuery = JSON.parse(jsonQueryString);

1 个答案:

答案 0 :(得分:1)

好问题!我们还没有充分记录这个,但基本的想法是有一个breeze-client npm包(https://www.npmjs.com/package/breeze-client),你可以使用它将传入的json查询解析为一个轻微的EntityQuery实例,从那里您可以查询EntityQuery并将其转换为您想要的任何服务器端语法,例如在您的情况下Sails。)

// req = the HTTP request object.
var resourceName = req.params.slug; // the HTTP endpoint
var entityQuery = breeze.EntityQuery.fromUrl(req.url, resourceName);
// you would write the transform to sails below.
var sailsQuery = tranformToSails(entityQuery);

这正是我们在breeze-sequelize npm包中所做的,我们接收传入的req.query并通过上面的过程来创建一个“Sequelize”#39;查询。

请参阅http://www.getbreezenow.com/sequelize-mysqlpostgressql-lite