NextJS 13迁移generateStaticParams报错:未提供字符串类型slug参数
问题分析与解决方案
核心错误:generateStaticParams 返回格式错误
你当前的generateStaticParams函数最后返回了[{ slugs }],这是一个包含单个对象的数组,而对象里的slugs才是实际需要的参数数组。但Next.js要求该函数直接返回由{ params: { slug: string } }组成的数组,这种嵌套结构导致Next.js无法正确识别slug参数。
同时还有两个次要问题:
response.map不是异步操作,不需要用await- 你注释里写的返回值和实际代码返回的不一致,注释是正确格式,但代码错误包装了一层结构
修正后的 generateStaticParams 代码
export async function generateStaticParams() { const { data } = await client.query({ query: gql` query getSlugs { posts(first: 100) { nodes { slug } } } `, }) // 直接映射出符合要求的参数数组,无需await return data.posts.nodes.map((post: Post) => ({ params: { slug: post.slug } })) }
额外优化:修复 getPost 的 GraphQL 变量使用
当前getPost里直接用模板字符串拼接params.slug到查询中,存在注入风险,也不符合GraphQL最佳实践,建议改用变量传递:
async function getPost(params) { const { data } = await client.query({ query: gql` query singlePost($slug: String!) { post(id: $slug, idType: SLUG) { content categories { nodes { name } } featuredImage { node { sourceUrl } } postId } } `, variables: { slug: params.slug } // 用变量传递参数 }) return data.post }
这样既安全,也能避免潜在的语法错误。
内容的提问来源于stack exchange,提问作者p_waves
相关产品推荐
相关产品推荐

