
在 Next.js 14 的 App Router 中,API 路由(/app/api/.../route.ts)不再接收 Express 风格的 req/res 对象,而是使用标准 Web Request/Response;直接调用 res.status() 会报错,需改用 NextResponse 或原生 Response 构造函数。
在 next.js 14 的 app router 中,api 路由不再接收 express 风格的 `req/res` 对象,而是使用标准 web request/response;直接调用 `res.status()` 会报错,需改用 `nextresponse` 或原生 `response` 构造函数。
Next.js 14(App Router)已彻底弃用旧版 Pages Router 的 Node.js 风格 API 处理方式。你当前代码中的 export async function POST(req, res) 是 Pages Router 的写法,而你在 App Router 下使用了该签名,导致 res 实际为 undefined 或非函数对象——因此抛出 TypeError: res.status is not a function。
✅ 正确做法:使用 NextRequest 和 NextResponse(推荐),或纯 Response 对象。
✅ 正确示例(App Router 标准写法)
将文件路径改为 /app/api/check-email/route.ts(注意:必须是 route.ts 或 route.js),并重写如下:
import { NextRequest, NextResponse } from 'next/server';
import { connect } from '../../../../lib/mongodb';
import User from '../../../models/userModel';
export async function POST(request: NextRequest) {
try {
const { email } = await request.json();
await connect();
const user = await User.findOne({ email });
if (user) {
return NextResponse.json(
{ message: 'User already exists' },
{ status: 400 }
);
}
return NextResponse.json(
{ message: 'Email is non-registered.' },
{ status: 201 }
);
} catch (error) {
console.error('Email check failed:', error);
return NextResponse.json(
{ message: 'Something went wrong while checking email' },
{ status: 500 }
);
}
}
? 关键要点说明
-
NextResponse.json()是最简洁安全的方式:自动设置Content-Type: application/json,并支持传入status选项; -
不要解构
req和res:App Router 的路由处理器只接收一个NextRequest参数,没有res参数; -
NextRequest替代req:提供.json()、.text()、.url、.method等标准 Web API 方法; -
可选:使用原生
Response(兼容性更强,无需引入 Next 特定模块):return new Response( JSON.stringify({ message: 'Email is non-registered.' }), { status: 201, headers: { 'Content-Type': 'application/json' }, } );
⚠️ 注意事项
- ❌ 不要混用 Pages Router 和 App Router 的 API 写法;
- ❌ 不要在 App Router 中尝试导入
express或模拟res.status(); - ✅ 确保 MongoDB 连接逻辑是幂等的(多次
connect()不重复建连),建议在connect()内部做连接缓存; - ✅ 生产环境建议对
email做基础校验(如格式、长度),避免空值或恶意输入穿透至数据库; - ✅ 使用
try/catch捕获异步错误是正确的,但建议细化错误类型(如MongoServerError)以实现更精准的响应策略。
掌握这一范式后,所有 App Router API 路由(GET/POST/PUT/DELETE)均可统一采用 NextRequest + NextResponse 模式,既符合 Web 标准,又获得 Next.js 的优化支持(如流式响应、中间件集成等)。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











