You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:05:35