问题 1:PrismaClient 初始化错误
错误信息:
PrismaClient needs to be constructed with a non-empty, valid PrismaClientOptions
原因:Prisma 版本不兼容,schema.prisma 缺少 url 配置
解决方案:
- 确保 `schema.prisma` 中有 url 配置:
prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
2、确保 `.env` 文件存在且配置正确
3、 重新生成客户端:
终端执行:
npx prisma generate
问题 2:数据库连接失败
错误信息:
Can't reach database server at localhost:5432
排查步骤:
- 检查 PostgreSQL 服务是否启动:
powershell
net start postgresql-x64-16
2.检查端口是否被占用:
powershell
netstat -ano | findstr :5432
-
检查防火墙设置
-
验证连接字符串格式:
postgresql://用户名:密码@主机:端口/数据库名
问题 3:找不到模块 @prisma/client
解决方案:
1)重新安装依赖
bash
npm install @prisma/client
2)生成客户端
npx prisma generate
问题 4:修改 seed.ts 后数据没更新
原因:seed.ts 是脚本文件,修改后需要手动运行
解决方案:
bash
npx ts-node prisma/seed.ts
问题 5:Prisma 版本冲突
错误信息:
Unknown property datasourceUrl provided to PrismaClient constructor
原因:Prisma 7.x 版本 API 变更
解决方案:降级到稳定版本
bash
npm install @prisma/client@5 prisma@5
npx prisma generate
问题 6:Prisma generate 报 EPERM 错误
错误信息:
EPERM: operation not permitted, rename '...\query_engine-windows.dll.node.tmp...' -> '...\query_engine-windows.dll.node'
原因:后端服务正在运行,锁定了 Prisma 引擎文件
解决方案:
1)停止正在运行的后端服务:在运行 `npm run start:dev` 的终端按 `Ctrl + C`
2)重新执行命令:
```bash
npx prisma generate
npx prisma db push
```
3). 重新启动后端服务
每次修改 `prisma/schema.prisma` 后,都需要先停止服务,再执行 `npx prisma generate`。
问题 7:接口返回 500 错误
错误现象:前端调用接口时返回 500 Internal Server Error
常见原因及解决方案:
|---------------|------------------------------------|
| 原因 | 解决方案 |
| 数据库字段不存在 | 执行 `npx prisma db push` 同步表结构 |
| 数据库连接失败 | 检查 `.env` 中的 `DATABASE_URL` 配置 |
| 请求参数格式错误 | 检查 Controller 中的参数定义 |
| Prisma 客户端未生成 | 执行 `npx prisma generate` |
排查步骤:
- 查看后端终端的错误日志
2)检查数据库表结构是否与 `schema.prisma` 一致
3)使用 Prisma Studio 验证数据:
bash
npx prisma studio
问题 8:数据库表为空,没有测试数据
解决方案:
1)配置 seed 脚本: `package.json` 中添加
```json
{
"prisma": {
"seed": "ts-node prisma/seed.ts"
}
}
```
2)创建seed 文件:prisma/seed.ts
```typescript
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
await prisma.sceneResult.create({
data: {
name: '测试场景',
description: '这是一个测试数据',
status: '1',
},
});
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());
```
3)执行seed 命令
```bash
npx prisma db seed
```
问题9:主键冲突(Unique constraint failed)
错误信息:
Unique constraint failed on the fields: (id)
原因:尝试插入的数据主键已存在
解决方案:
1)如果是 seed 脚本,先清空表或使用 `upsert` 操作
2)或者删除重复的插入语句
```typescript
// 使用 upsert 避免主键冲突
await prisma.sceneResult.upsert({
where: { id: 1 },
update: { name: '更新后的名称' },
create: { id: 1, name: '新名称', status: '1' },
});
```
问题 10:删除接口报错 "Record to delete does not exist"
错误信息:
PrismaClientKnownRequestError: An operation failed because it depends on one or more records that were required but not found.
原因:尝试删除的记录不存在
解决方案:在 Service 中添加错误处理:
```typescript
async deleteScene(id: number) {
try {
await this.prisma.sceneResult.delete({ where: { id } });
return { msg: '删除成功', code: '200', data: null };
} catch (error) {
if (error.code === 'P2025') {
return { msg: '记录不存在', code: '404', data: null };
}
throw error;
}
}
```