Meteor.call()格式将js对象转换为正确的休息查询

时间:2014-09-10 15:47:40

标签: javascript json wordpress rest meteor

我正在尝试对wordpress rest api进行API调用。来自控制台的工作呼叫如下所示:

http://dev.thomastraum.com/wp-json/posts?type=tt_works&filter[work_categories]= all&filter[posts_per_page]=1

A"手写"来自Meteor的工作电话看起来像这样:

    return Meteor.http.call("GET", Settings.wpdomain + "/wp-json/posts", {params: {'type':'tt_works','filter[work_categories]':'all','filter[posts_per_page]':'1'}});

现在我的问题是,如何将javascript对象传递给流星调用,最终它们的格式正确。对我来说,上面的调用看起来应该像这样表示:

ArchiveQuery = {
type:'tt_works',
filter:{
    work_categories:'all',
    posts_per_page:1
}
};

但如果我通过它

return Meteor.http.call("GET", Settings.wpdomain + "/wp-json/posts", {params:ArchiveQuery);

它返回所有类型参数为tt_works的帖子,并忽略查询的所有其余部分。我尝试EJSON.stringify(ArchiveQuery),但它使用{}以不同方式格式化查询。

1 个答案:

答案 0 :(得分:1)

您需要的查询格式看起来不是很常见。我认为最简单的解决方案是自己格式化对象:

var fillQuery = function(query, prefix, object) {
  _.each(object, function(val, key) {
    var k = (prefix) ? prefix + '[' + key + ']' : key;
    if(_.isObject(val)) {
      fillQuery(query, k, val);
    } else {
      query[k] = '' + val;
    }
  });
  return query;
};

var objectToQuery = function(object) {
  return fillQuery({}, null, object);
};

请参阅here实际操作。