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,需注意两点:
- API文件需放在
pages/api目录下,命名为timetable.ts(不是目录)。 - 必须导出默认的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
相关产品推荐
相关产品推荐

