12

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

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,但似乎没有任何基于数组值的过滤方式。

4

2 回答 2

4

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

filter: { fields: { tags: { in: [$tag] } } }
于 2017-10-25T14:35:20.827 回答
0

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

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

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

filter: { frontmatter: { keywords: { regex: $tag } } }
于 2019-08-10T12:40:23.920 回答