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

NextJS中使用getStaticProps调用API报错,求问题排查

NextJS getStaticProps 异步请求错误分析与修复

问题核心原因

你的代码在异步请求处理上存在三个关键错误:

  • 未等待异步请求完成:axios.get()返回的是Promise对象,你直接赋值给res却没加await,此时res是Promise实例而非接口响应结果,自然拿不到res.data。
  • Promise链式调用未传递数据:即使使用then回调,你只在里面打印了res.data,却没把数据返回或赋值给外部变量,后续代码无法获取接口返回内容。
  • 不必要的JSON.stringify:NextJS会自动序列化getStaticProps返回的props,手动转成字符串会导致组件拿到的是字符串而非预期的对象。

修正后的代码(推荐async/await写法)

export async function getStaticProps(){
    try {
        // 用await等待请求完成,拿到真实响应对象
        const res = await axios.get("/api/teacher/loadstudents");
        console.log(res.data);
        // 直接传递原始数据,NextJS自动处理序列化
        return {
            props:{data: res.data}
        }
    } catch (err) {
        console.log(err);
        // 出错时返回默认数据,避免页面报错
        return {
            props:{data: []}
        }
    }
 }

const TeacherMainPage = (props)=>{
    var classCode = "XZLE123"; 
    console.log("These are the props: ", props) ;
    // 现在可以直接用props.data操作对象
}

链式调用写法(若坚持使用)

export async function getStaticProps(){
    let studentdata = [];
    // 加await等待整个Promise链完成
    await axios.get("/api/teacher/loadstudents")
    .then(res=>{                        
        console.log(res.data);
        // 将数据赋值给外部变量
        studentdata = res.data;
    })
    .catch(err => {console.log(err)}) 

    return {
        props:{data: studentdata}
    }
 }

补充说明

之前用names常量正常,是因为它是同步赋值的变量,不需要处理异步逻辑。而axios接口请求是异步操作,必须等待请求完成后才能获取数据,这是异步编程的基本要求。

内容的提问来源于stack exchange,提问作者BakerShoeMaker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:48:21