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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:32:41