前端转型全栈(四)——常见的错误及解决方案

问题 1:PrismaClient 初始化错误

错误信息:

PrismaClient needs to be constructed with a non-empty, valid PrismaClientOptions

原因:Prisma 版本不兼容,schema.prisma 缺少 url 配置

解决方案:

  1. 确保 `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

排查步骤:

  1. 检查 PostgreSQL 服务是否启动:

powershell

net start postgresql-x64-16

2.检查端口是否被占用:

powershell

netstat -ano | findstr :5432

  1. 检查防火墙设置

  2. 验证连接字符串格式:

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` |

排查步骤:

  1. 查看后端终端的错误日志

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;

}

}

```

相关推荐
袋鼠云数栈1 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛139246256731 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256732 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_4 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz4 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪4 小时前
【多线程】Lock与Condition
大数据·数据库
Lightpwd5 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端
LabVIEW开发5 小时前
LabVIEW 64位安装的位深陷阱:工具包、内存与工程兼容
数据库·labview·labview知识·labview功能·labview程序
寺中人5 小时前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
这个DBA有点耶5 小时前
同样48核配置TPS差1倍?高性价比数据库一体机的“软硬协同”才是分水岭
服务器·数据库·架构