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

Next.js 13集成Prisma插入数据时出现Cannot read properties of undefined错误

问题:Next.js 13 + Prisma 插入数据时出现 Cannot read properties of undefined (reading 'task') 错误

我在Next.js 13应用中配置Prisma,prisma push和prisma generate执行都正常,但调用数据插入函数时触发上述错误。尝试将模型名改为小写后问题依旧,求解决方法。

Prisma Schema 代码

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Task {
  id                  Int               @id @default(autoincrement())
  job_id              Int
  // 其他字段
}

Prisma Client 初始化代码(路径:@/lib/prisma.js)

import { PrismaClient } from "@prisma/client";
let prisma;

if (typeof window === "undefined") {
    if (process.env.NODE_ENV === "production") {
        prisma = new PrismaClient()
    } else {
        if (!global.prisma) {
            global.prisma = new PrismaClient()
        }

        prisma = global.prisma
    }
}

export default prisma

数据插入函数代码

import prisma from "@/lib/prisma"

export async function InsertData(data) {
    await prisma.task.create({
        data: data
    })

    const allTask = await prisma.task.findMany()

    return allTask
}

解决步骤

  1. 确保Prisma Client正确生成
    重新执行npx prisma generate,确认无报错且node_modules/@prisma/client目录存在。

  2. 修复Prisma Client初始化逻辑
    原代码在客户端环境中prisma会是undefined,如果插入函数在客户端组件调用就会出错。修改初始化代码:

    import { PrismaClient } from "@prisma/client";
    
    const prisma = global.prisma || new PrismaClient();
    
    if (process.env.NODE_ENV !== "production") global.prisma = prisma;
    
    export default prisma;
    

    同时必须确保InsertData函数只在服务端组件、API路由或Server Actions中调用,禁止在客户端组件直接执行数据库操作。

  3. 验证模型与Client一致性
    Prisma Client会自动将模型名转为小写驼峰(Task → task),所以prisma.task.create的调用是正确的,无需修改模型名。

  4. 检查数据库连接
    运行npx prisma studio,确认能正常连接数据库并看到Task表,验证DATABASE_URL环境变量配置正确。

内容的提问来源于stack exchange,提问作者daruom mourad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:40:09