提交课程触发错误:Prisma Client未完成初始化
解决Prisma Client初始化失败问题("@prisma/client did not initialize yet")
问题描述
尝试保存课程名称时错误弹窗触发,已确认Prisma与MySQL连接正常,npx prisma generate和npx prisma push执行成功,但调用/api/courses接口时仍报错"@prisma/client did not initialize yet"。
相关代码
提交函数代码
const onSubmit = async (values: z.infer<typeof formSchema>) => { try{ const reponse = await axios.post("/api/courses", values) router.push(`/teacher/courses/${reponse.data.id}`); toast.success("Course created successfully") }catch{ toast.error("Something went wrong") } };
API路由代码(/api/courses/route.ts)
import { db } from "@/lib/db"; import { auth } from "@clerk/nextjs/server"; import { NextResponse } from "next/server"; export async function POST( req: Request, ) { try { const { userId } = await auth(); const { title } = await req.json(); if (!userId) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const course = await db.course.create({ data: { title, userId, }, }); return NextResponse.json(course); } catch (error) { console.log("[COURSES]", error); return NextResponse.json({ error: "Internal Server Error" }, { status: 500 }); } }
终端错误日志
npm run dev > rpm-lms0.2@0.1.0 dev > next dev ▲ Next.js 15.3.1 - Local: http://localhost:3000 - Network: http://192.168.1.15:3000 - Environments: .env ✓ Starting... ✓ Ready in 6.7s ○ Compiling /middleware ... ✓ Compiled /middleware in 4.5s (224 modules) <w> [webpack.cache.PackFileCacheStrategy] Serializing big strings (117kiB) impacts deserialization performance (consider using Buffer instead and decode when needed) ○ Compiling /teacher/create ... ✓ Compiled /teacher/create in 19.9s (1659 modules) GET /teacher/create 200 in 22577ms ○ Compiling /favicon.ico ... ✓ Compiled /favicon.ico in 2.2s (1017 modules) GET /favicon.ico 200 in 2729ms ○ Compiling /api/courses ... ✓ Compiled /api/courses in 2.1s (1667 modules) Initializing Prisma Client... ⨯ Error: @prisma/client did not initialize yet. Please run "prisma generate" and try to import it again. at eval (lib\db.ts:8:35) at <unknown> (rsc)/./lib/db.ts (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\app\api\courses\route.js:33:1) at __webpack_require__ (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\webpack-runtime.js:33:42) at eval (webpack-internal:///(rsc)/./app/api/courses/route.ts:5:65) at <unknown> (rsc)/./app/api/courses/route.ts (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\app\api\courses\route.js:22:1) at __webpack_require__ (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\webpack-runtime.js:33:42) at __webpack_require__ (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\webpack-runtime.js:33:42) at __webpack_exec__ (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\app\api\courses\route.js:184:39) at <unknown> (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\app\api\courses\route.js:185:309) at __webpack_require__.X (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\webpack-runtime.js:168:21) at <unknown> (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\app\api\courses\route.js:185:47) at Object.<anonymous> (D:\Work\My Projects\LMS\rpm-lms0.2\.next\server\app\api\courses\route.js:188:3) 6 | 7 | console.log("Initializing Prisma Client..."); > 8 | export const db = global.prisma || new PrismaClient(); | ^ 9 | 10 | if (process.env.NODE_ENV !== "production") { 11 | global.prisma = db; { page: '/api/courses' }
解决方案
- 修正
lib/db.ts语法错误
从错误日志可见,lib/db.ts第11行存在多余的大括号,导致代码解析失败。正确写法:
import { PrismaClient } from "@prisma/client"; console.log("Initializing Prisma Client..."); export const db = global.prisma || new PrismaClient(); if (process.env.NODE_ENV !== "production") { global.prisma = db; }
- 清理缓存并重新生成
执行以下命令清除Next.js缓存,重新生成Prisma Client并重启服务:
rm -rf .next/ npx prisma generate npm run dev
- 验证Prisma配置
确认prisma/schema.prisma中客户端生成配置正确:
generator client { provider = "prisma-client-js" }
- 检查环境变量
确保.env中的DATABASE_URL格式正确,能正常连接MySQL:
DATABASE_URL="mysql://用户名:密码@localhost:3306/数据库名"
内容的提问来源于stack exchange,提问作者Saif Sabry
相关产品推荐
相关产品推荐

