Next.js 14中res.status is not a function错误排查求助
解决Next.js API路由中
res.status is not a function错误 你的问题出在对Next.js API路由的响应方式理解有误,NextResponse并非仅用于中间件,不管是App Router还是Pages Router的API路由,都可以用它来返回规范响应。具体修正方案如下:
错误原因
如果你的API路由位于App Router(app/api/...目录下),API路由函数仅接收req作为参数,不存在res参数;即使是Pages Router,使用NextResponse也是更推荐的响应方式,你之前的写法混淆了不同的响应模式。
修正后的代码
import { connect } from '../../../../lib/mongodb'; import User from '../../../models/userModel'; import { NextResponse } from 'next/server'; // 导入NextResponse export async function POST(req) { // 移除多余的res参数 try { // 获取请求体中的email const { email } = await req.json(); // 连接数据库 await connect(); // 通过邮箱查找用户 const user = await User.findOne({ email }); // 返回对应响应 if (user) { return NextResponse.json( { message: "User already exists" }, { status: 400 } // 在这里设置状态码 ); } else { return NextResponse.json( { message: "Email is non registered." }, { status: 201 } ); } } catch (error) { console.error(error); return NextResponse.json( { message: "Something went wrong while register" }, { status: 500 } ); } }
关键修改点
- 导入
NextResponse:用于构造标准API响应,支持自定义状态码和返回JSON数据 - 移除
POST函数的res参数:App Router的API路由函数仅接收req参数 - 使用
NextResponse.json()返回响应:第一个参数是响应体内容,第二个参数是配置对象,可通过status字段设置HTTP状态码
内容的提问来源于stack exchange,提问作者ChefDimas
相关产品推荐
相关产品推荐

