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

访问/users端点时Prisma报UUID转Int错误,求原因与解决办法

问题

访问/users端点时出现如下错误,请问原因是什么?有哪些修复方案?

[1]   19 const usersRouter = express_1.default.Router();
[1]   20 usersRouter.get("/", (req, res) => __awaiter(void 0, void 0, void 0, function* () {
[1]   21     try {
[1] → 22         const allUsers = yield prisma.user.findMany(
[1] Error in domain logic: Conversion from `Uuid(ac44955b-ea51-474a-ae89-5a6e1744df9a)` to `Int` failed.
[1]     at Cn.handleRequestError (~\backend\node_modules\@prisma\client\runtime\library.js:123:6989)
[1]     at Cn.handleAndLogRequestError (~\backend\node_modules\@prisma\client\runtime\library.js:123:6206)
[1]     at Cn.request (~\backend\node_modules\@prisma\client\runtime\library.js:123:5926)
[1]     at async l (~\backend\node_modules\@prisma\client\runtime\library.js:128:9968)

预期行为

访问/users端点时,应返回所有用户的JSON数据:

[
  {
    "userid": "d536eb96-02d5-4a7b-8b72-90c1585db30d",
    "user_name": "mockuser1",
    "user_abbreviation": "mu1"
  },
  {
    "userid": "35c709e3-b498-4493-856b-f46b8df370a1",
    "user_name": "mockuser2",
    "user_abbreviation": "mu2"
  },
 {
    "userid": "99718d23-bd15-446a-aef7-bb71c844bec5",
    "user_name": "mockuser3",
    "user_abbreviation": "mu3"
  }
]

复现步骤

技术栈:Node、Express、Typescript、Prisma、Postgres

  1. 使用PostgreSQL数据库,表主键为UUID字符串,已完成数据初始化
  2. 执行npx prisma db pull成功生成Prisma Schema
  3. 配置Express实现Prisma的CRUD操作,接口代码如下:
import express from "express";
import { PrismaClient } from "@prisma/client";
import { busyHandler, catchHandler, handleError } from "../../common/common.error";
const prisma = new PrismaClient();
const usersRouter = express.Router();

usersRouter.get("/", async (req, res) => {
    try {
        const allUsers = await prisma.user.findMany();
        res.send(allUsers);
    } catch (err) {
        catchHandler(res, err);
    } finally {
        await prisma.$disconnect();
    }
});

已尝试的操作

  • 将响应方法替换为res.json(allUsers)
  • 给findMany添加过滤条件:
usersRouter.get("/", async (req, res) => {
    try {
        const user = await prisma.user.findMany({where:{userid:'ac44955b-ea51-474a-ae89-5a6e1744df9a'}});
        res.send(user);
    } catch (err) {
        catchHandler(res, err);
    } finally {
        await prisma.$disconnect();
    }
});

环境与Schema信息

Prisma Schema

model user {
  userid               String           @id @db.Uuid
  user_name            String?
  user_abbreviation    String?
}

环境信息

  • 操作系统:Windows
  • 数据库:PostgreSQL
  • Node.js版本:v16.14.2
  • 框架:Express.js
  • 语言:Typescript
  • prisma版本:5.3.1
  • @prisma/client版本:5.4.2

问题原因分析

错误核心原因是Prisma CLI与@prisma/client版本不匹配:你使用的prisma CLI是5.3.1,但@prisma/client是5.4.2。版本不一致会破坏Prisma内部的类型解析逻辑,导致新版本客户端尝试将UUID类型转换为旧版本CLI预期的Int类型,触发转换失败。

修复方案

1. 统一Prisma相关包版本

将prisma和@prisma/client的版本统一为同一版本,推荐使用与Node.js兼容的最新稳定版:

  • 修改package.json中的版本号,确保两者一致:
    {
      "dependencies": {
        "@prisma/client": "5.4.2"
      },
      "devDependencies": {
        "prisma": "5.4.2"
      }
    }
    
  • 重新安装依赖:
    npm install
    
  • 重新生成Prisma Client:
    npx prisma generate
    

2. 验证Schema与数据库映射

确保数据库中userid字段确实为UUID类型,可执行以下命令重新同步Schema:

npx prisma db push

注意:db push会直接修改数据库,生产环境需谨慎操作

3. 移除不必要的连接断开操作

Prisma Client本身是连接池,无需每次请求后断开连接。移除finally块中的await prisma.$disconnect(),避免重复创建/销毁连接影响性能:

usersRouter.get("/", async (req, res) => {
    try {
        const allUsers = await prisma.user.findMany();
        res.json(allUsers);
    } catch (err) {
        catchHandler(res, err);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:05:26