【问题标题】:Passing variable into regex In Gatsby graphql query在 Gatsby graphql 查询中将变量传递给正则表达式
【发布时间】:2018-04-06 14:12:42
【问题描述】:

我有以下查询,它接收变量$tag。目前我正在根据其frontmatter.keywords 的值过滤结果。 keywords 是一个逗号分隔的字符串,所以我需要使用正则表达式来检查其中是否包含 $tag,但是我不知道如何将变量传递到正则表达式中。如果我将一个值硬编码到正则表达式中(如下面的代码中我硬编码了/example/,过滤工作。如果我用$tag 替换example,我会收到一个错误:

GraphQLError:变量“$tag”从未在操作“TagQuery”中使用。

export const pageQuery = graphql`
  query TagQuery($tag: String) {
    allMarkdownRemark(
      limit: 100
      sort: { fields: [frontmatter___date], order: DESC }
      filter: { frontmatter: { keywords: { regex: "/example/" } } }
    ) {
      totalCount
      edges {
        node {
          fields {
            slug
          }
          excerpt
          frontmatter {
            title
            keywords
            date
          }
        }
      }
    }
  }
`;

我应该如何在正则表达式中使用$tag

我实际上更喜欢采用不同的方法并将标签作为数组添加到 gatsby-node.js 中,但似乎没有任何基于数组值的过滤方式。

【问题讨论】:

    标签: javascript regex graphql gatsby


    【解决方案1】:

    我最终将标签拆分为一个数组,然后使用以下内容进行过滤:

    filter: { fields: { tags: { in: [$tag] } } }
    

    【讨论】:

    • 你能告诉我你是如何将变量 $tag 传递给查询的吗?
    • @OtaniShuzo 查询中可用的变量是您在使用createPage() 时作为键传递给context 对象的值。因此,如果您使用{alpha: 'abc', bravo: 2} 的上下文,您可以在查询中访问两个变量(如果需要):query ExampleQuery($alpha: String, $bravo: Int) {
    • @Undistraction 你介意发布整个查询现在的样子吗?
    • @VasilisTsirimokos 给你。认为就是这样:github.com/Undistraction/gatsby-starter-skeleton/blob/master/…
    【解决方案2】:

    无论你在哪里传递 $tag,只需将其转换为

    const $tag = "\/".concat(tag).concat("\/")
    

    但是您的错误特别指出您的查询根本没有使用该变量。所以你还需要这样做

    filter: { frontmatter: { keywords: { regex: $tag } } }
    

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 2019-11-06
      • 2020-03-05
      • 2019-03-21
      • 2013-04-19
      • 1970-01-01
      • 2017-05-15
      • 2021-08-07
      • 2017-10-24
      相关资源
      最近更新 更多