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

Next.js 14定义API路由报错:TypeError: res.status is not a function

解决Next.js API路由res.status is not a function错误

核心问题

你混淆了App Router和Page Router的API路由写法:

  • 在App Router的route.ts中错误使用了Page Router专属的NextApiRequest/NextApiResponse类型,App Router遵循Web标准的Request/Response模式,不存在res.status()这类方法。
  • 尝试切换到Page Router时,没有遵循其API路由的规范写法。

App Router 正确实现(src/app/api/timetable/route.ts)

App Router的API路由无需依赖NextApiRequest/NextApiResponse,直接使用NextResponse或原生Web Response对象返回结果:

import { NextResponse } from 'next/server';

type ResponseData = {
  message: string;
};

export function GET() {
  // 使用NextResponse简化JSON响应
  return NextResponse.json<ResponseData>({ message: 'Hello from Next.js!' }, { status: 200 });
}

也可以使用原生Web标准的Response:

type ResponseData = {
  message: string;
};

export function GET() {
  return new Response(JSON.stringify({ message: 'Hello from Next.js!' }), {
    status: 200,
    headers: { 'Content-Type': 'application/json' },
  });
}

Page Router 正确实现(pages/api/timetable.ts)

如果要切换到Page Router,需注意两点:

  1. API文件需放在pages/api目录下,命名为timetable.ts(不是目录)。
  2. 必须导出默认的handler函数,而不是单独的GET函数:
import type { NextApiRequest, NextApiResponse } from 'next';

type ResponseData = {
  message: string;
};

export default function handler(
  req: NextApiRequest,
  res: NextApiResponse<ResponseData>
) {
  res.status(200).json({ message: 'Hello from Next.js!' });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:35:57