更新:对于我的特定用例,@ 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
}
}
}
`
答案 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 { ... } }
}
`