Next.js生产环境所有API请求返回400 Bad Request问题求助
检查API路由文件结构
确保pages/api(App Router项目对应app/api)下的文件路径和请求路径完全匹配:比如请求/api/game,对应文件必须是pages/api/game.js(或.ts、.tsx);嵌套路由要对应文件夹结构,比如/api/game/list需对应pages/api/game/list.js。生产环境Next.js对路由匹配的容错性远低于开发环境,文件名或路径的微小偏差都会导致400错误。确认请求方法与API处理函数匹配
开发环境中未明确限制请求方法的API可能默认兼容所有方法,但生产环境路由逻辑更严格。如果前端用POST请求,但API处理函数只判断并处理了GET,会直接返回400。检查API代码中的方法校验逻辑:export default function handler(req, res) { if (req.method !== 'GET') { return res.status(400).json({ message: 'Method not allowed' }); } // 业务逻辑 }确保前端请求的方法与后端允许的方法完全一致。
验证环境变量配置
开发环境依赖.env.local,生产环境需确保.env.production中的变量配置正确:客户端使用的变量需以NEXT_PUBLIC_开头,服务端变量直接用process.env.*。如果API路由依赖的环境变量缺失或错误,会导致逻辑提前返回400,或无法连接数据库等依赖资源。检查请求头和参数格式
生产环境对请求格式的校验更严格:比如前端fetch时未设置Content-Type: application/json,但API中用req.body解析JSON,会因解析失败返回400。检查前端请求代码:fetch('/api/game', { method: 'POST', headers: { 'Content-Type': 'application/json', // 必须设置,否则后端无法解析请求体 }, body: JSON.stringify({ id: 1 }) })同时确认API中对必填参数的校验逻辑,若开发环境未做校验但生产环境添加了严格校验,缺失参数会直接返回400。
排查路由体系混用问题
若项目同时使用App Router和Pages Router,API路由需放在对应体系的目录下:App Router项目的API必须在app/api下,Pages Router项目必须在pages/api下,生产环境Next.js不会跨体系匹配路由。查看生产环境日志定位问题
启动生产服务时添加日志参数:npx next start -v,或在API处理函数开头添加日志:export default function handler(req, res) { console.log('API请求详情:', req.method, req.url, req.body); // 后续逻辑 }若控制台无日志输出,说明请求未到达API处理函数,大概率是路由匹配问题;若有日志,可通过输出内容定位参数或逻辑错误导致的400。
确认未使用静态HTML导出
若执行了next export生成静态文件,而非用next start运行Node服务,API路由会完全失效(静态导出不支持服务端路由)。确保流程是npx next build+npx next start,而非next export。
内容的提问来源于stack exchange,提问作者Linus-CS

