Next.js 15中Prisma新增TimeSettings模型调用findFirst报错
我使用Next.js 15 + Prisma + PostgreSQL开发应用,在schema.prisma中新增了TimeSettings模型:
model TimeSettings { id String @id @default(uuid()) minAdvanceHours Int @default(2) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }
执行npx prisma generate和npx prisma db push命令均无报错,但在路由中调用const settings = await prisma.timeSettings.findFirst();时,出现运行时错误:
TypeError: Cannot read properties of undefined (reading 'findFirst')
通过console.log输出的Prisma实例信息显示,实例中不存在timeSettings模型。以下是完整代码片段:
完整代码片段
schema.prisma
// 原有模型示例 model User { id String @id @default(uuid()) name String? email String @unique } model TimeSettings { id String @id @default(uuid()) minAdvanceHours Int @default(2) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }
lib/Prisma.ts
import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() export default prisma
lib/db.js
import { PrismaClient } from '@prisma/client' const prisma = global.prisma || new PrismaClient() if (process.env.NODE_ENV !== 'production') global.prisma = prisma export default prisma
time-settings路由(app/api/time-settings/route.ts)
import prisma from '@/lib/db' export async function GET() { const settings = await prisma.timeSettings.findFirst() return Response.json(settings) }
Prisma实例console.log输出
PrismaClient { user: { // User模型的方法 }, // 无timeSettings属性 }
排查修复步骤
验证Prisma客户端生成结果
检查node_modules/.prisma/client目录下的index.d.ts和index.js文件,确认是否包含TimeSettings模型的类型定义和timeSettings客户端方法。如果没有,说明generate命令未正确生成新模型的代码。强制重新生成Prisma客户端
执行npx prisma generate --force命令,强制覆盖旧的客户端文件。如果仍有问题,可以先删除node_modules/.prisma/client目录,再重新执行npx prisma generate。重启Next.js开发服务器
Next.js开发服务器会缓存已加载的模块,新增模型后必须重启服务器,才能加载更新后的Prisma客户端。检查Prisma实例的导入路径
确认路由中导入的Prisma实例来自正确的文件(如上述lib/db.js或lib/Prisma.ts),且该文件未被缓存。如果使用全局Prisma实例(如lib/db.js中的global.prisma),重启服务器后全局缓存会被清空,加载新的客户端。确认数据库同步状态
执行npx prisma studio打开Prisma数据库管理界面,检查TimeSettings表是否已成功创建。如果表存在但客户端未更新,重点排查客户端生成和导入环节的问题。
内容的提问来源于stack exchange,提问作者bc220425092 MUHAMMAD HASSAN SA

