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

Nuxt构建后API返回404问题求助

解决Nuxt构建后API返回404的问题

嘿,这种开发环境正常、生产环境掉链子的问题真的太闹心了!我之前也碰到过类似的情况,咱们一步步拆解排查:

最常见的原因:API路径配置不区分环境

开发时你可能用了本地API地址(比如http://localhost:3001/api),但构建Nuxt后,前端请求依然指向这个本地地址,而生产环境根本没有这个服务,自然返回404。

解决方案:用环境变量配置Axios基础路径

在nuxt.config.js里区分开发/生产环境的API地址:

export default {
  axios: {
    baseURL: process.env.NODE_ENV === 'production' 
      ? 'https://你的生产API域名/api' 
      : 'http://localhost:3001/api'
  },
  // 或者用Nuxt的公共运行时配置,支持构建后动态修改
  publicRuntimeConfig: {
    axios: {
      baseURL: process.env.API_BASE_URL || 'http://localhost:3001/api'
    }
  }
}

这样生产环境只要设置API_BASE_URL环境变量,就能自动指向正确的API地址。

第二可能:Nuxt接管了API路由(同端口部署场景)

如果你的Koa API和Nuxt部署在同一个端口,Nuxt的路由优先级默认比自定义API高,导致所有/api开头的请求被Nuxt的404页面拦截。

解决方案:配置Server Middleware转发API请求

在nuxt.config.js里把API路径交给你的Koa服务处理:

export default {
  serverMiddleware: [
    // 把所有/api开头的请求转发到你的Koa API入口文件
    { path: '/api', handler: '~/server/index.js' }
  ]
}

确保你的Koa入口文件导出的是Koa实例,比如:

// ~/server/index.js
import Koa from 'koa'
import convert from 'koa-convert'
import cors from 'kcors'
import bodyParser from 'koa-body'
import session from 'koa-session'

const app = new Koa()
// 你的API路由配置...

export default app

第三可能:CORS配置不正确

开发环境你可能用了*允许所有跨域,但生产环境CORS限制了域名,导致请求被浏览器拦截(看起来像404,但实际是跨域错误,要去控制台看Network的请求状态)。

解决方案:生产环境配置正确的CORS来源

在你的Koa服务里修改kcors配置:

app.use(cors({
  origin: process.env.NODE_ENV === 'production' 
    ? 'https://你的Nuxt生产域名' 
    : '*',
  credentials: true // 如果需要带Cookie的话
}))

快速排查步骤

  • 打开浏览器控制台的Network面板,查看生产环境下API请求的实际URL,确认是不是指向了错误的地址
  • 检查nuxt.config.js里的Axios/baseURL配置,有没有区分开发和生产
  • 如果是同端口部署,检查Server Middleware是否正确配置
  • 查看浏览器控制台的Console标签,有没有跨域相关的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:34:16