如何在 getStaticProps 中获取 slug 值以调用 api,参数为 slug

Posted

技术标签:

【中文标题】如何在 getStaticProps 中获取 slug 值以调用 api,参数为 slug【英文标题】:How to get slug value in getStaticProps to call api with parameter as slug 【发布时间】:2021-09-09 03:07:25 【问题描述】:

页面内容:

import  useRouter  from "next/router";
    
export default function Gunluk( data ) 
    let router = useRouter()
    
    const  slug  = router.query;
    return slug;

并显示在页面上 60d6180ea9284106a4fd8441(网址中的 https://.../gunluk/60d6180ea9284106a4fd8441 id)

所以我可以获取 ID,但我不知道如何将其传递给 API。

export async function getStaticProps(context) 
    const res = await fetch(`http://localhost:3000/api/books-i-have`)
    const data = await res.json()
    
    if (!data) 
        return 
            notFound: true,
        
    
    
    return 
        props:  data , // will be passed to the page component as props
    

我通常使用它,但它在 slug 中不起作用。我尝试了其他两种方法,但都失败了 (https://nextjs.org/docs/basic-features/data-fetching)。

简而言之,如何从 Slug 页面连接到 API?

文件目录:

    pages/
        gunluk/
            [...slug].js
            index.js

【问题讨论】:

上下文参数是一个对象,其中包含参数键,它将具有您的 slug 值,您可以使用该值进行 API 调用。我已经用代码发布了答案 【参考方案1】:

你可以在getStaticProps中获取slug的值,用它来调用基于slug的api

export async function getStaticPaths() 
    const idList = await fetchAllIds();
    const paths = [];
    idList.forEach((id) =>  paths.push(`/gunluk/$id`) )
    return  paths, fallback: true ;


export async function getStaticProps( params ) 
    const  slug  = params;

    try 
        const data = await fetchGunluk(slug);
        return data ?  props:  data   :  notFound: true ;
     catch (error) 
        console.error(error);
        return  notFound: true ;
    

【讨论】:

当我添加它时它返回 服务器错误错误:getStaticPaths 是动态 SSG 页面所必需的,而“/gunluk/[...slug]”缺少。阅读更多:nextjs.org/docs/messages/invalid-getstaticpaths-value 你能给getStaticPaths()举个例子吗 我添加了 getStaticPath 示例供您参考【参考方案2】:

我相信您正在寻找的是getStaticPaths

【讨论】:

以上是关于如何在 getStaticProps 中获取 slug 值以调用 api,参数为 slug的主要内容,如果未能解决你的问题,请参考以下文章

Next.js:如何从 getStaticProps 中获取静态资产

如何在 NextJS 中为 getStaticProps 导入 API 路由?

如何从 getStaticProps 或 getStaticPaths 中的请求页面获取 slug?

从 getStaticProps 获取的数据不显示在页面组件中

如何在 NextJS 中使用 Prisma 创建后重新获取数据?

使用 getStaticProps 获取数据 Next.js 和 Typescript