我正在创建一个 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,因为查询如何知道在访问 API 时要查询什么 slug posts/[slug].js
?
还值得注意的是 KeystoneJS 在他们的指南中说:
单个实体查询接受必须提供 id 的 where 参数。
我如何根据访问的 slug 将帖子的 ID 传递给查询,[slug].js
这是否意味着我根本无法通过 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 } };
}
我怎样才能做到这一点?