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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:03:36