Filter 如何基于传入参数的值有条件地应用GraphQL筛选器?

Filter 如何基于传入参数的值有条件地应用GraphQL筛选器?,filter,graphql,gatsby,Filter,Graphql,Gatsby,更新:对于我的特定用例,@langpavel的解决方案将起作用。然而,它避免回答最初的问题。。。是否可以基于传入参数的值有条件地应用GraphQL筛选器 我正在将一个参数传递到名为$env的GraphQL查询中,我希望在我的博客文章的降价前沿中与草稿布尔值结合使用,以便在生产过程中过滤草稿 下面是我的简短提问。正如你所看到的,我有一个过滤函数,它根据博客文章是否是草稿进行过滤。我不知道如何利用$env参数仅在$env等于生产时应用过滤器 export const pageQuery = grap

更新:对于我的特定用例,@langpavel的解决方案将起作用。然而,它避免回答最初的问题。。。是否可以基于传入参数的值有条件地应用GraphQL筛选器

我正在将一个参数传递到名为
$env
的GraphQL查询中,我希望在我的博客文章的降价前沿中与
草稿
布尔值结合使用,以便在生产过程中过滤草稿

下面是我的简短提问。正如你所看到的,我有一个过滤函数,它根据博客文章是否是草稿进行过滤。我不知道如何利用
$env
参数仅在
$env
等于
生产时应用过滤器

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

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

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

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

好主意,但不幸的是,在Gatsby运行时提取和处理GraphQL查询时,节点环境(如
process.env
)不可用是的,它们是和
process.env.node_env
特别是:Hi Rob。不幸的是,由于Gatsby运行时处理GraphQL查询的方式,过滤必须从查询本身内部进行。诚然,我提供的查询在技术上可能无效,但这只是因为出于演示目的,我包含了
$env
参数。如果可能的话,我希望这里的人能帮助我正确地使用
$env
和过滤器