【问题标题】:Filtering on custom fields in apostrophe-headless过滤 撇号-headless 中的自定义字段
【发布时间】:2018-08-16 08:01:37
【问题描述】:

我正在使用带有撇号无头的撇号。我有一个名为 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 

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

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

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

【问题讨论】:

    标签: apostrophe-cms


    【解决方案1】:

    apostrophe-pieces-pages 不需要为 API 和其他代码提供游标过滤器方法。我认为混淆来自于文档关注apostrophe-pieces-pages这一事实,因为直接渲染整页是撇号教程系列主要关注的用例。

    在您的帮助下,我们更新了 apostrophe-headless 以支持一个选项,该选项可以指定应为公共 API 标记为“安全”的过滤器,其方式与 apostrophe-pieces-pages 相同:

    '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 获取内容:

    /api/v1/bundles/IDGOESHERE

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

    【讨论】:

    • 感谢您的快速回复,汤姆。我实际上是在尝试根据那里的自定义字段进行过滤,而不仅仅是 slug 字段。我有一个要搜索的名称、版本、类别字段。该 PR 是否也允许我这样做?
    • 这更像是一个撇号无头的问题。 apostrophe-pieces-pages 正在调用 safeFilters,apostrophe-headless 也应该为您的支持 API 的部分模块引入一种简单的方法。 github.com/apostrophecms/apostrophe-headless/issues/…
    【解决方案2】:

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

    我对该链接中显示的示例代码所做的唯一更改是在以 self.and({...其中包含所有文档,但实际上您需要它不返回任何内容。所以,而不是:

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

    我做了这个(有点老套,但你明白了):

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

    【讨论】:

      猜你喜欢
      • 2018-10-14
      • 2018-09-08
      • 2022-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 2020-06-04
      • 1970-01-01
      相关资源
      最近更新 更多