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

Next.js API路由中res未定义问题求助

问题原因与解决方案

核心问题

你误用了Next.js Pages Router的API路由写法(依赖req/res参数),但代码是在App Router的app/api/proxy/page.js中——这两种路由系统的语法完全不兼容,导致res参数根本不存在,才会抛出Cannot read properties of undefined (reading 'status')错误。

正确写法(App Router Route Handler)

App Router的API路由(官方称为Route Handler)需要导出对应HTTP方法的异步函数,通过NextResponse返回标准JSON响应:

import { NextResponse } from 'next/server';

// 导出对应HTTP方法的函数,比如GET、POST
export async function GET() {
  // 调用第三方接口
  try {
    const thirdPartyResponse = await fetch('https://你的第三方接口地址');
    const thirdPartyData = await thirdPartyResponse.json();

    // 返回自定义JSON响应,status参数可选,默认200
    return NextResponse.json({ 
      name: 'John Doe',
      thirdPartyData: thirdPartyData
    }, { status: 200 });
  } catch (error) {
    // 错误处理,返回500状态码
    return NextResponse.json({ error: '请求第三方接口失败' }, { status: 500 });
  }
}

为什么直接return对象不行?

直接return { name: 'John Doe' }时,Next.js会把这个对象当成React组件的返回值处理,而非API响应,所以客户端拿到的不是JSON格式数据。必须用NextResponse.json()包装,它会自动设置正确的Content-Type: application/json响应头。

扩展:处理POST请求(如果需要)

如果API需要接收POST请求,通过request参数获取请求体:

export async function POST(request) {
  const requestBody = await request.json();
  // 处理请求体并调用第三方接口
  return NextResponse.json({ message: 'POST请求处理完成' });
}

内容的提问来源于stack exchange,提问作者Yash Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:07:09