gpt4 book ai didi

如果过滤器变量为空,GraphQL 禁用过滤

转载 作者:行者123 更新时间:2023-12-05 00:59:59 25 4
gpt4 key购买 nike

我有一个 Gatsby GraphQL 查询,以获取按日期排序并按类别过滤的帖子列表。

{
posts: allContentfulPost(
sort: {fields: [date], order: DESC},
filter: {category: {slug: {eq: $slug}}}
) {
edges {
node {
title {
title
}
date
}
}
}
}

现在当 $slug 是空字符串 "" 时,我得到

{
"data": {
"posts": null
}
}

有没有办法获取所有帖子?

最佳答案

您可以使用正则表达式过滤器来发挥自己的优势。如果你传递一个空表达式,那么所有的帖子都会被返回,因为一切都会匹配。

query Posts($slugRegex: String = "//"){
posts: allContentfulPost(
sort: {fields: [date], order: DESC},
filter: {category: {slug: {eq: $slugRegex}}}
) {
# Rest of the query.
}
}

默认情况下,将返回所有帖子(如果没有传递任何内容,$slugRegex 是一个空的正则表达式)。当 $slugRegex 变成有意义的表达式时,只会显示匹配的帖子。

至于传递值,我假设您使用 gatsby-node.js 来创建页面。在这种情况下,就这么简单:

// gatsby-node.js

exports.createPages = async ({ actions }) => {
const { createPage } = actions

// Create a page with only "some-slug" posts.
createPage({
// ...
context: {
slugRegex: "/some-slug/"
}
})

// Create a page with all posts.
createPage({
// ...
context: {
// Nothing here. Or at least no `slugRegex`.
}
})
}

关于如果过滤器变量为空,GraphQL 禁用过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51047735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com