NextJS14中Prisma执行种子函数无报错但未创建数据库记录
问题分析与解决方案
核心问题是你没有在Prisma的创建操作前添加await关键字。Prisma的所有CRUD方法都是异步函数,会返回Promise对象。你当前的代码只是触发了数据库创建请求,但没有等待请求执行完成,函数就直接走到console.log("guests created")并结束,导致数据库操作还没完成就被终止,自然没有数据写入。
修复后的Server Actions代码
你可以选择逐个等待创建操作完成,或者用Promise.all并行执行(效率更高):
"use server" import { prisma } from "@/prisma/client" export async function seedGuests() { try { // 方式1:逐个等待创建 await prisma.guest.create({ data: { name: "John Doe", can_bring_guest: true, }, }) await prisma.guest.create({ data: { name: "Billy Sparks", can_bring_guest: false, }, }) // 方式2:并行创建(推荐,减少等待时间) // await Promise.all([ // prisma.guest.create({ // data: { // name: "John Doe", // can_bring_guest: true, // }, // }), // prisma.guest.create({ // data: { // name: "Billy Sparks", // can_bring_guest: false, // }, // }) // ]) console.log("guests created") } catch (e) { console.log(e) } }
额外提示
虽然你用useEffect调用Server Action能工作,但Next.js 14中更推荐在服务器组件里直接调用Server Action,或者通过表单提交触发,这样更符合框架的设计模式,避免客户端不必要的请求触发。
内容的提问来源于stack exchange,提问作者juju
相关产品推荐
相关产品推荐

