将变量传递给 Gatsby graphql 查询中的正则表达式
Passing variable into regex In Gatsby graphql query
我有以下查询正在接收变量 $tag
。目前我正在根据其 frontmatter.keywords
的值过滤结果。 keywords
是逗号分隔的字符串,因此我需要使用正则表达式来检查其中是否包含 $tag
,但是我不知道如何将变量传递到正则表达式中。如果我将一个值硬编码到正则表达式中(如下面我硬编码 /example/
的代码,则过滤有效。如果我将 example
替换为 $tag
,我会收到错误消息:
GraphQLError: Variable "$tag" is never used in operation "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
,但似乎没有任何方法可以根据数组的值进行过滤。
我最终将标签拆分成一个数组,然后使用以下内容进行过滤:
filter: { fields: { tags: { in: [$tag] } } }
无论你在哪里传递 $tag,只需将其转换为
const $tag = "\/".concat(tag).concat("\/")
但是您的错误特别指出您的查询根本没有使用该变量。所以你还需要做
filter: { frontmatter: { keywords: { regex: $tag } } }
我有以下查询正在接收变量 $tag
。目前我正在根据其 frontmatter.keywords
的值过滤结果。 keywords
是逗号分隔的字符串,因此我需要使用正则表达式来检查其中是否包含 $tag
,但是我不知道如何将变量传递到正则表达式中。如果我将一个值硬编码到正则表达式中(如下面我硬编码 /example/
的代码,则过滤有效。如果我将 example
替换为 $tag
,我会收到错误消息:
GraphQLError: Variable "$tag" is never used in operation "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
,但似乎没有任何方法可以根据数组的值进行过滤。
我最终将标签拆分成一个数组,然后使用以下内容进行过滤:
filter: { fields: { tags: { in: [$tag] } } }
无论你在哪里传递 $tag,只需将其转换为
const $tag = "\/".concat(tag).concat("\/")
但是您的错误特别指出您的查询根本没有使用该变量。所以你还需要做
filter: { frontmatter: { keywords: { regex: $tag } } }