Prisma ORM + PostgreSQL 部署时无法连接sql数据库

问题描述 投票:0回答:1

在我部署的 Node REST API 服务中,当我尝试连接一个特定表(而不是其他表)时,我看到一个无用的错误。错误显示“TypeError:无法读取未定义的属性(读取'findMany')”

正如我所说,我可以毫无问题地读取和写入其他表。当我在本地运行 api 时,我可以读取和写入有问题的表 (UserFavorite)。我正在本地和从我部署的 api 连接到数据库的同一实例。

我对这两个表的查询几乎相同。我在这里缺少什么?下面粘贴了架构和查询。

架构:

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

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

model User {
  id            Int            @id @default(autoincrement())
  createdAt     DateTime       @default(now()) @map("created_at")
  clerkId       String         @unique @map("clerk_id")
  userFavorites UserFavorite[]

  @@map("user")
}

model UserFavorite {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now()) @map("created_at")
  articleId String   @map("article_id")
  user      User     @relation(fields: [userId], references: [id])
  userId    Int      @map("user_id")

  @@unique([articleId, userId])
  @@index([slug, userId(sort: Asc)])
  @@map("user_favorite")
}

服务:

const prisma = new PrismaClient();

export async function getUserByClerkId(clerkId: string) {
  try {
    const user = await prisma.user.findUnique({
      where: { clerkId }
    });
    return user;

  } catch (err) {
    console.error('Error getting user', err);
    throw err;
  }
}

export async function getUserFavorites(userId: number) {
  try {
    const favs = await prisma.userFavorite.findMany({
      where: {
        userId,
      }
    });
    return favs;

  } catch (err) {
    console.error('Error getting user favorites', err);
    throw err;
  }
}

这个问题是在我重命名UserFavorite表后出现的。起初它似乎试图连接到旧的表名。从那时起,我:

  • 删除并重新安装我的所有节点模块
  • 重新生成了 prisma 客户端
  • 删除了我的整个数据库,包括所有迁移并从 prisma 模式重新生成它
  • 创建了一个具有不同名称的新数据库。在那里也不起作用
  • 使用 Prisma CLI 在 Prisma 架构上运行
    prisma format
node.js postgresql orm google-cloud-sql prisma
1个回答
0
投票

呵呵。看起来我应该能够在我的模式中拥有一个 PascalCase 实体,在我的数据库中重命名为一个 Snake_case 表名,并在代码中作为 prisma.entityName 进行访问。我不确定为什么这不起作用,但我发现的解决方法是将表重命名为

favorites
这样我就不必担心大小写问题。

哦,我还在我的 package.json 中添加了一个安装后脚本,因此这可能是修复它的原因:

  • “安装后”:“npx prisma 生成”
© www.soinside.com 2019 - 2024. All rights reserved.