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

Next.js使用NextApiResponse返回响应失败,Vercel报TypeError错误

问题分析与解决办法

错误原因

你混淆了Next.js两种路由体系的API写法:

  • App Router(app目录下的API路由)的GET函数不接收res参数,要求直接返回NextResponse实例;
  • NextApiResponse是Pages Router(pages/api目录下)的API路由才会传入的响应对象。

在App Router环境下,你定义的res参数实际是无效值,调用res.status()自然会抛出TypeError: t.status is not a function。

解决办法

方案1:改用Pages Router的API路由结构

如果要保留res.status().send()的写法,将文件移动到pages/api/目录下(比如pages/api/demo.ts),代码调整为Pages Router的标准格式:

import type { NextApiRequest, NextApiResponse } from 'next'

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  if (req.method === 'GET') {
    res.status(200).send(3)
  }
}

方案2:在App Router下模拟res.status().send()写法

如果要保留在app目录下,可封装一个简易工具函数模拟你习惯的调用链,适配App Router的NextResponse规则:

import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

// 模拟res.status().send()的调用结构
const createMockRes = () => ({
  status: (code: number) => ({
    send: (data: any) => new NextResponse(String(data), { status: code })
  })
})

export async function GET(req: NextRequest) {
  const res = createMockRes()
  return res.status(200).send(3)
}

补充说明

你用NextResponse能正常运行,是因为App Router的API路由标准返回就是NextResponse(它是Web标准Response对象的扩展),Vercel部署时能正确识别这种格式。

内容的提问来源于stack exchange,提问作者Abdulaziz Alhadhoud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:05:55