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

Next.js中getServerSideProps用axios请求404但useEffect中正常如何解决?

问题核心原因

这个问题是getServerSideProps和useEffect的运行环境差异导致的:

  • getServerSideProps运行在Node.js服务端,没有浏览器的上下文环境,发起请求时如果用相对路径,无法自动补全域名、端口等前缀,会直接请求错误地址导致404
  • useEffect运行在用户浏览器端,相对路径会自动拼接当前页面的域名、端口,所以可以正常请求到接口
    常见的触发场景是你配置的apiBaseUrl是相对路径(比如值为/api),服务端发起请求时无法解析该路径对应的完整服务地址。
解决方案

方案1:补全服务端请求的绝对路径

在getServerSideProps中针对服务端环境拼接完整的请求地址,可通过环境变量区分开发和生产环境:
首先在项目根目录的.env.local文件中添加配置:

# 客户端使用的相对路径前缀,带NEXT_PUBLIC_前缀的变量客户端可访问
NEXT_PUBLIC_API_BASE=/api
# 服务端使用的完整前缀,开发环境填本地服务地址,生产环境填线上域名
API_BASE=http://localhost:3000/api

然后修改getServerSideProps中的地址拼接逻辑:

export async function getServerSideProps() {
  try {
    // 判断当前运行环境:服务端没有window对象
    const baseUrl = typeof window === 'undefined' ? process.env.API_BASE : process.env.NEXT_PUBLIC_API_BASE;
    const ApiUrl = baseUrl + "/my-url";
    const homeData = await axios
      .get(ApiUrl)
      .then((response) => {
        return response.data;
      })
      .catch((error) => {
        return error.message;
      });

    return {
      props: {
        homeData: homeData,
        error: false,
        ApiUrl: ApiUrl,
      },
    };
  } catch (e) {
    return {
      props: {
        error: true,
        homeData: null,
        message: e.message,
      },
    };
  }
}

方案2:直接调用API逻辑(仅适用于Next.js自带API路由)

如果你请求的是项目pages/api目录下的Next.js自带接口,完全不需要在getServerSideProps中发起HTTP请求,直接引入接口对应的处理逻辑调用即可,既能避免路径问题,还能减少一次HTTP请求提升性能。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:24:00