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

Next.js 14集成MySQL认证时出现res.status不是函数的错误求助

Next.js 14 注册接口 TypeError: res.status is not a function 问题解决

问题原因

Next.js 13+ 启用的 App Router 中,API 路由的写法和旧版 Pages Router 完全不同:

  • 不再接收 req, res 双参数,仅传入 req
  • 不能直接调用 res.status(),需使用 NextResponse 构造响应
  • 获取请求体必须通过 await req.json(),无法直接访问 req.body

修正后的 API 路由代码 (app/api/register/route.js)

import { connectToDatabase } from "@/utils/db";
import { NextResponse } from "next/server";

export async function POST(req) {
  // 正确获取请求体数据
  const { username, email, password } = await req.json();

  const db = await connectToDatabase();

  // 注意:mysql2 的 query 方法返回 [结果行, 字段信息],需解构取结果行
  const [existingUser] = await db.query("SELECT * FROM users WHERE email = ?", [email]);

  if (existingUser.length > 0) {
    return NextResponse.json({ message: "Email already registered" }, { status: 400 });
  }

  await db.query(
    "INSERT INTO users (username, email, password) VALUES (?, ?, ?)",
    [username, email, password]
  );

  return NextResponse.json({ message: "Registration successful" }, { status: 200 });
}

额外注意事项

  • 数据库结果处理:若使用 mysql2 库,query 方法返回的是包含结果行和字段描述的数组,必须解构获取实际用户数据
  • 密码安全:当前代码直接存储明文密码存在严重风险,建议用 bcrypt 等工具对密码哈希后再存入数据库
  • 表单代码无需修改:你的 registerform 组件逻辑正常,不需要调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:16:01