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
相关产品推荐
相关产品推荐

