【发布时间】:2021-04-26 00:15:02
【问题描述】:
我正在创建一个 Next.js 博客,它使用由 KeystoneJS 创建的 API。我非常对如何从帖子的 slug 获取动态路线上的单个帖子感到困惑。
查询
我认为查询应该是这样的:
query Post($slug: String) {
Post(where: { slug: $slug }) {
id
}
}
这是在一个名为post.service.js的文件中这样查询的:
export async function getBySlug(slug) {
return apolloClient
.query({
query: gql`
query Post($slug: String) {
Post(where: { slug: $slug }) {
id
}
}
`,
})
.then((result) => {
return result.data.Post;
});
}
不出所料,这会导致 ApolloError,因为查询如何知道在访问 posts/[slug].js 时要查询 API 的 slug?
还值得注意的是,KeystoneJS 在他们的指南中说:
单个实体查询接受必须提供 id 的 where 参数。
如何根据在[slug].js 访问的 slug 将帖子的 ID 传递给查询,这是否意味着我根本无法通过 slug 进行查询?
在[slug].js 上,我正在使用getStaticPaths() 和getStaticProps(),如下所示:
export async function getStaticPaths() {
const posts = await getAll();
const paths = posts.map((post) => ({
params: { slug: post.slug },
}));
return { paths, fallback: false };
}
export async function getStaticProps({ params }) {
const term = await getBySlug(params.slug);
return { props: { post } };
}
我该怎么做?
【问题讨论】:
-
你设法让这个工作@Anthony?
标签: graphql next.js apollo keystonejs dynamic-routing