问题
我不能通过 slug 查询 API,它必须是通过 id。通过KeystoneJS headless CMS
API 提供数据,我的 NextJS 应该在静态生成的 Next.js 应用程序中使用这些数据。必须像这样查询 Keystone API:
所有帖子:(ALL_POSTS_QUERY)
query {
allPosts {
id
slug
title
}
}
单个帖子:(POST_QUERY)
query {
Post(where: { id: $id }) {
title
body
}
}
我确实用于Apollo Client
连接到 API 端点。
对单个帖子的查询必须如上所述格式化,带有一个 id 变量,这似乎是问题所在。我需要通过slug而不是 id 生成静态页面。
功能
getStaticPaths()
export const getStaticPaths = async () => {
const { data } = await apolloClient.query({
query: ALL_POSTS_QUERY,
});
return {
paths: data.allPosts.map(({ id, slug }) => ({
params: { slug: slug },
})),
fallback: false,
};
};
getStaticProps()
export const getStaticProps = async ({ params }) => {
const id = params.id;
const { data } = await apolloClient.query({
query: POST_QUERY,
variables: {
id,
},
});
return {
props: {
term: data.Post,
},
};
};
有关KeystoneJS 生成的 API的更多信息。
请帮忙
我对开发非常陌生,所以我对此的理解仍然是基本的。如果我误解了逻辑,请道歉。请任何人都可以帮助我解决我的功能出错的地方吗?我找不到其他人试图通过 slug 构建动态路由,而是通过 id 查询 API 以检索该帖子的数据。