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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:00:58