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

Next.js 13 App目录下POST请求出现Error 500问题求助

问题原因

你用的是Next.js App Router的API路由(文件在app/api/下),但代码里误用了Pages Router的NextApiRequest/NextApiResponse类型和响应处理方式。App Router的API路由不提供res对象,而是通过返回NextResponse实例来处理响应,所以调用res.status会触发TypeError。

修复步骤
  1. 替换导入模块:把NextApiRequest/NextApiResponse换成App Router专用的NextRequest和NextResponse(来自next/server)
  2. 修改POST函数参数:只保留req参数,移除res
  3. 正确读取请求体:用await req.json()获取POST数据,而非直接访问req.body
  4. 替换响应方式:用NextResponse.json()或NextResponse.error()返回结果,通过第二个参数设置状态码
修改后的完整路由代码
import bcrypt from "bcrypt";
import { NextRequest, NextResponse } from "next/server";
import prismadb from "@/lib/prismadb";

export async function POST(req: NextRequest) {
    try {
        const { email, password } = await req.json();

        const existingUser = await prismadb.user.findUnique({
            where: {
                email,
            },
        });

        if (existingUser) {
            return NextResponse.json(
                { error: "E-mail already exists. Login instead." },
                { status: 422 }
            );
        }

        const hashedPassword = await bcrypt.hash(password, 12);

        const user = await prismadb.user.create({
            data: {
                email,
                hashedPassword,
                image: "",
                emailVerified: new Date(),
            },
        });

        return NextResponse.json(user, { status: 200 });
    } catch (error) {
        return NextResponse.json(
            { error: `Something went wrong: ${error}` },
            { status: 400 }
        );
    }
};
额外优化提示

你的组件代码里,密码不匹配的判断没有加return,会导致即使密码不一致,请求依然会发送:

// 原代码
if (password !== confirmPassword) Notifier("Passwords do not match", "error");

// 修改为
if (password !== confirmPassword) {
    Notifier("Passwords do not match", "error");
    return; // 阻止后续请求发送
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:23:31