Next.js Route Handler返回200但外部接口返回400问题求助
解决Next.js Route Handler透传外部接口错误状态码的问题
你的问题核心是:Route Handler调用外部接口返回400等错误码时,直接用NextResponse.json(error)返回会默认带上200的HTTP状态码,导致客户端axios因为收到2xx响应,不会进入catch块。要实现错误透传,关键是返回错误时手动指定对应的状态码。
修正后的Route Handler代码
import { NextResponse } from 'next/server'; import axios, { AxiosError } from 'axios'; export async function POST(req: Request) { const something: DataInterface = await req.json(); const data = something.requestData; try { const res = await instance.post( `外部接口地址`, data, { headers: { '自定义请求头': '对应值' } } ); const { output_schema } = res.data; const generateUrl = `生成的目标URL`; const response = { output_schema, generateUrl }; return NextResponse.json(response); } catch (error) { // 处理外部接口返回的HTTP错误 if (error instanceof AxiosError) { // 透传外部接口的状态码和错误数据 return NextResponse.json( error.response?.data || '请求外部接口失败', { status: error.response?.status || 500 } ); } // 处理网络异常等非HTTP错误 return NextResponse.json( { message: '服务器内部错误' }, { status: 500 } ); } }
关键修改说明
- 识别错误类型:通过
instanceof AxiosError判断是否为外部接口返回的HTTP错误,精准提取外部接口的status状态码和错误数据 - 指定响应状态码:利用
NextResponse.json的第二个参数{ status: ... },设置和外部接口一致的错误状态码,确保客户端axios收到非2xx响应时自动进入catch块 - 兜底错误处理:针对网络中断等非HTTP错误,返回500状态码和通用错误提示,避免无响应或状态码缺失
客户端代码无需调整
你的客户端组件代码可以保持原样,现在当Route Handler返回400等错误码时,axios会触发catch块,setResponse(error)就能拿到正确的错误信息。
内容的提问来源于stack exchange,提问作者Muhammad Tohir Rafly
相关产品推荐
相关产品推荐

