过滤撇号无头的自定义字段

时间:2018-04-09 13:02:44

标签: apostrophe-cms

我正在使用撇号与撇号无头。我有一个名为bundles的撇号模块,我想根据自定义字段进行过滤。文档和它说我需要定义一个撇号 - 页面模块才能启用它。

这是我的配置:

  'bundles': {
    extend: 'apostrophe-pieces',
    name: 'bundles',
    restApi: {
      maxPerPage: 10,
    }
  },

  'bundles-pages': {
    extend: 'apostrophe-pieces-pages',
    piecesFilters: [
      {
        name: 'name'
      },
      {
        name: 'slug'
      }
    ]
  },

如果我进行全文搜索:

/api/v1/bundles?page=1&search=text 

它按预期工作,但如果我尝试过滤slu ::

/api/v1/bundles?page=1&slug=slug_value 

它返回所有包而不是匹配的包。

2 个答案:

答案 0 :(得分:1)

apostrophe-pieces-pages不需要使游标过滤器方法可用于API和其他代码。我认为这种混淆来自于文档侧重于apostrophe-pieces-pages这一事实,因为直接呈现完整页面是Apostrophe教程主要关注的主要系列的用例。

在您的帮助下,我们更新了apostrophe-headless以支持一个选项,用于指定应为公共API标记为“安全”的过滤器,方法与撇号 - 页面相同:

'my-module': {
  restApi: {
    // We're assuming here that you have added fields
    // called 'color' and 'brand' in your schema
    safeFilters: [ 'slug', 'color', 'brand' ]
  }
}

但是,对于任何热衷于查询slug属性的人来说,请记住,如果你正在进行API调用,那么使用记录的REST模式可以更好地通过_id获取内容:< / p>

/api/v1/bundles/IDGOESHERE

与_id不同,Slugs偶尔会发生变化。如果您知道_id并且您没有创建面向用户的“友好URL”,那么您应该使用_id。

答案 1 :(得分:0)

我遇到了同样的问题,发现解决方案是添加一个自定义过滤器,如此处记录的:https://apostrophecms.org/docs/tutorials/intermediate/cursors.html#custom-filters

我对该链接中显示的示例代码所做的唯一更改是在以self.and({...开始的那一行中的问题上。问题是,当没有文档匹配特定的子句时,the仍然返回初始光标其中包含所有文档,但实际上您需要它不返回任何内容。因此,代替:

self.and({marketId:market._id});

我做到了(有点hacky,但是你明白了)

self.and({marketId:market === undefined?9999999999:market._id});