Open4

[Astro] Prismaの使い方

平田直毅平田直毅

AstroからMongoDBに接続するにはPrisma経由にするのが良いようだ。

初期処理としてPrismaClientを生成する。どこで生成するのがいいか。
何回も生成しないでインスタンスを使い回せるのがいい。

平田直毅平田直毅

DB接続クラスのベースクラスでやっとくと一度の実行だけで済む。

import { PrismaClient } from '@prisma/client'

export default class BaseDB {
  static prisma: PrismaClient = new PrismaClient()
}
平田直毅平田直毅

このようにサブクラスにして使う。

import type { User } from '@prisma/client'
import BaseDB from './base'

class UserDB extends BaseDB {
  async getUserByEmail(email: string): Promise<User | null> {
    try {
      const user = await BaseDB.prisma.user.findUnique({
        where: {
          email: email
        }
      })
      return user
    } catch (err) {
      console.error(err)
      return null
    }
  }
}
export default new UserDB()
import { UserDB } from '@/server/db'

const user = await UserDB.getUserByEmail(email)
平田直毅平田直毅

型はPrismaのスキーマ定義がそのまま使える。

import type { User } from '@prisma/client'