如何基于传入参数的值有条件地应用GraphQL过滤器?

时间:2018-12-03 20:26:09

标签: filter graphql gatsby

更新:对于我的特定用例,@ langpavel的解决方案将起作用。但是,它避免了回答原始问题... 是否可以基于传入参数的值有条件地应用GraphQL过滤器?

我要在我的GraphQL查询中传递一个名为$env的参数,我想将其与博客帖子的markdown前题中的draft布尔值结合使用,以过滤出生产。

以下是我的缩写查询。如您所见,我有一个过滤功能,该功能根据博客文章是否为草稿进行过滤。我不知道该怎么做,是利用$env参数来仅在$env等于production时应用过滤器。

export const pageQuery = graphql`
  query BlogPosts($env: String!) {
    markdownRemark(
      filter: { frontmatter: { draft: { eq: true } } }
    ) {
      frontmatter {
        title
        date(formatString: "MMMM DD, YYYY")
        draft
      }
    }
  }
`

2 个答案:

答案 0 :(得分:0)

您提供的GraphQL查询无效,因为$ env变量未在任何字段中使用。我认为出于您的目的,最好将$env传递到GraphQL查询之外。如果通过HTTP提供GraphQL,则可以将其作为查询参数或HTTP标头发送。然后,您可以使用大多数GraphQL库提供的context概念将值传递给GraphQL解析器。

答案 1 :(得分:0)

对于gatsby,您可能应该编写两个查询并根据process.env有条件地选择一个查询:

export const pageQuery = (process.env.NODE_END === 'production') ?
graphql`
  query BlogPosts {
    markdownRemark(
      filter: { frontmatter: { draft: { ne: true } } }
    ) { frontmatter { ... } }
  }
` : graphql`
  query BlogPosts {
    markdownRemark { frontmatter { ... } }
  }
`