Koa + Prisma クイック スタート

10 分で Koa + Prisma をマスターしてデータベース CRUD を実装する

序文

Prisma はいわゆる次世代 ORM ツールで、これも TypeScript に基づいて実装されていますが、強力な型安全性をもたらします。

この記事では、Koa.js を使用して単純な Web サービスを構築し、MySQL データベースと連携して、Prisma を通じてデータを追加、削除、変更、クエリする方法を示します。

プリズマ

Prismaはいわゆる次世代 ORM ツールで、技術系 Web サイトの中でも非常に優れた中国語 Web サイトと言えるPrisma の中国語 Web サイトは次のとおりです。

画像-20230509200931239

Prisma は、単なる ORM ツールではなく、オープンソース データベース ツールチェーン プロジェクトです。サポートするデータベースには、PostgreSQL、MySQL、MongoDB、SQL Server、SQLite が含まれます。この記事では、デモのために MySQL を使用します。

使い方に関しては、初めて触れる人にとっては少し面倒です。以下のプロセスをまとめました。

  • 依存関係をインストールする
  • Prismaプロジェクトを初期化する
  • Prisma スキーマの設計 (データベース情報とモデル)
  • データベースと同期する
  • Prismaクライアントの生成
  • Prisma Client を使用して CRUD を完了する

まずは開発環境を構築してから、戻って Prisma の導入を続けてみましょう。

環境を初期化する

Koa を使用して Web サービスをすばやく構築し、最初にディレクトリを作成して依存関係をインストールします。

$ mkdir koa-prisma
$ cd koa-prisma
$ pnpm init

# 安装 Koa 依赖
$ pnpm add koa @koa/router koa-bodyparser
  • @koa/router: ルーティング機能を統合しやすいルーティングミドルウェア
  • koa-bodyparser: リクエスト本文データを解析し、ctx.request.body オブジェクトに配置します。

次に、新しいものを作成してindex.js、単純な Web サービスを完成させます。

const Koa = require('koa')
const Router = require('@koa/router')
const bodyParser = require('koa-bodyparser')

const app = new Koa()

// 实例化路由器,并设置公共路由前缀 /users
const router = new Router({
    
    
  prefix: '/users'
})

app.use(bodyParser())

// 查询用户列表
router.get('/', async ctx => {
    
    
 
})

// 查询单个用户
router.get('/:id', async ctx => {
    
    
 
})

// 创建用户
router.post('/', async ctx => {
    
    

})

// 更新用户
router.patch('/:id', async ctx => {
    
    

})

// 删除用户
router.delete('/:id', async ctx => {
    
    

})

// 注册路由中间件
app.use(router.routes()).use(router.allowedMethods())

app.listen(3000, () => {
    
    
  console.log('服务器运行在 3000 端口')
})

上記のコードでは、データベースのクエリ、挿入、更新、削除の操作に対応する 5 つのルーティング メソッドが定義されています。後で Prisma の初期化を完了し、Prisma Client を導入すると、これらのインターフェイスが実現できます。

次に、nodemonコマンドを使用してサービスを開始します。使いやすいように、このモジュールをグローバルにインストールすることをお勧めします。

$ nodemon src/index.js

プリズマ CLI

まず、Prisma の 2 つの依存モジュールをインストールします。

$ pnpm add -D prisma 
$ pnpm add @prisma/client

最初にインストールされる Prisma は CLI コマンドです。これは主に、データベースの移行、Prisma クライアントの作成など、Prisma のさまざまな機能を呼び出すために使用されます。

次のコマンドを実行して、prisma の使用方法を確認します。

$ npx prisma --help

画像-20230509194858894

ご覧のとおり、prisma には 7 つのコマンドが用意されています。

注文 説明する
初期化 アプリケーションでPrismaを初期化する
生成する 主にPrisma Clientの生成に使用されます。
データベース データベースのスキーマとライフサイクルを管理する
移行する データベースを移行する
スタジオ Web 側ワークベンチを開始してデータを管理する
検証 Prisma のスキーマ ファイルの構文が正しいかどうかを確認してください
フォーマット Prisma のスキーマ ファイルをフォーマットします。デフォルトは prisma/schema.prisma です。

また、例も示しています。ここでは主にそのうちの 3 つを使用します。残りは、自分で効果を確認するために使用できます。

画像-20230509195654406

プリズマの初期化

次のコマンドを実行して初期化を完了します。

$ npx prisma init

画像-20230509220945387

このコマンドの効果は、次のように、コマンドが配置されているディレクトリ (現在のルート ディレクトリ) に.envファイルとディレクトリを作成しprisma、このディレクトリにファイルを作成することです。schema.prisma

画像-20230509195929494

.envこのファイルは誰もがよく知っている、環境変数を配置するファイルであり、その中の環境変数は通常、構成情報です。

prismaこのディレクトリは Prisma 関連のファイルを格納するために使用されます。現在schema.prismaファイルは上記の Prisma スキーマ ファイル 1 つだけです。このファイルに接続情報とデータベースのモデルを定義します。

Prisma スキーマの設計

schema.prismaこれは Primsa を使用する主要な構成ファイルであり、Prisma スキーマ ファイルと呼ばれ、次の 3 つの基本構造が含まれています。

  • 情報元

  • ビルダー

  • データモデルの定義

VSCプラグインをインストールする

パターン ファイルを編集する前に、 VS Code にPrismaプラグインをインストールします。これにより.prisma、コードの強調表示、書式設定、オートコンプリート、ジャンプ定義、およびファイルの検査機能が提供されます。このプラグインのサポートがなければ、スキーマ ファイルは単なるプレーン テキストになります。

画像-20230507161551169

セットビルダー

ジェネレーターを定義するために使用しgenerate、プロバイダー属性を通じて宣言しますprisma-client-js(現在、これのみをサポートしています)。コマンドを実行するとprisma generate、Prisma Client が生成され、データの追加、削除、変更、クエリを実行するために使用されます。

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

データソースを設定する

データ ソースを定義するために使用しますdatasource。Prisma が接続するデータベースを設定するために必要な情報です。provider接続するデータベースのタイプです。デフォルトは postgresql ですが、使用する mysql に変更しました。urlデータベースの URL です。通常、設定を分離するために、prisma cli によって自動的に生成される環境変数ファイルに個別に定義されます.envこの関数を通じてenv()、このファイル内の変数が読み取られます。

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

.envファイルを見てください。デフォルトの接続は Postgresql です。

DATABASE_URL=postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public

これはデータベース接続 URL の構成です。

MySQL 接続 URL の構造

以下は必須フィールドです。

名前 プレースホルダー 説明する
ホスト HOST データベース IP またはドメイン名などlocalhost
ポート PORT データベースポート、例:3306
ユーザー USER データベースのユーザー名、例:root
パスワード PASSWORD データベースのパスワード
データベース DATABASE データベース名(例)mydb

この手順に従って、独自の MySQL URL を定義します。

DATABASE_URL="mysql://root:root123@localhost:3306/prisma"

ユーザーモデルを定義する

ORM ツールとして、モデルは不可欠なはずです。Prismaのモデルには主に以下の機能があります。

  • アプリケーションドメインを構成するエンティティ
  • データベース(PostgreSQL などのリレーショナル データベース) またはコレクション(MongoDB)にマップされたテーブル
  • Prisma Client APIクエリの基礎を形成します。
  • TypeScript を使用する場合、Prisma Client はモデルとそのバリアントの型定義を提供し、データベース アクセスの型安全性を確保します。

形式のこれらの Prisma 組み込みユーティリティ関数は@id()、モデルを定義するときに使用されます。@default()たとえば、@id()主キーの宣言やデフォルト値の設定に使用され@default()、その命名は非常に意味論的であり、基本的には SQL のキーワードであり、非常に理解しやすいものです。

ユーザー モデルの定義は次のとおりです。

model User {
    
    
  id          Int      @id @default(autoincrement())
  name        String   
  email       String   @unique
  password    String
  createdTime DateTime @default(now()) @map("created_time")
  updatedTime DateTime @updatedAt @map("updated_time")

  @@map("user")
}

説明が必要な情報がいくつかあります:

@@map()1. モデルの名前は、デフォルトで作成されたデータ テーブルの名前です。ここでは大文字の User が使用され、データ テーブル名も大文字の User になります。マップされたテーブル名を設定し、それを小文字のユーザーに変更するために使用できます。

2. 各モデルのレコードは一意に識別可能です。つまり、@id を使用して宣言できる主キーが必要です。

3. Int や String などのフィールドの型は、Prisma を通じてデータベースの対応する型、つまり int と varchar に変換されます。

4.@uniqueこれは一意の値の制約であるため、生成されたユーザー テーブルの電子メール フィールドの値を繰り返すことはできません。

5. 作成時、更新時と同様、JSやTSの命名規則に従うためキャメルケースを使用しますが、データベースの命名規則に従うため、後からリマッピングしてアンダースコアを付けます@map()

データベースを同期する

Prisma モデルをデータベースに同期します。私たちのような新しいプロジェクト (空のプロジェクト) の場合は、次のコマンドを使用できます。

$ npx prisma db push

すでにデータがあるプロジェクトの場合、このコマンドは使用できず、prisma migrate代わりに移行を使用します。この記事には関係ありません。

画像-20230509213137705

データベースのスキーマを作成し、Prisma スキーマを使用してデータベースを同期し、次のprisma generateコマンドを「密かに」実行して Prisma クライアントを生成します。

prismaデータベースにアクセスして更新すると、データベースとテーブルが作成されますuser

画像-20230509213437412

Prismaクライアントを生成する

以前にデータベースを同期したときにすでに実行されていますprisma generateしたがって、再度実行する必要はありませんが、モデルの変更など、Prisma Schema ファイルが変更された場合は、このコマンドを再度実行して Prisma Client を再生成する必要があります。

generateコマンド実行の流れは以下の通りです。

画像

CRUDの追加、削除、変更、クエリ

Prismaクライアントの初期化

Prisma Client を使用すると、CRUD 操作を実行できます。初期化:

const {
    
     PrismaClient } = require('@prisma/client')

const prisma = new PrismaClient()

Prisma Client のインスタンスである Prisma にはさまざまなタイプがあり、次の方法で使用できますprisma.模型.CRUD方法

画像-20230509214952783

画像-20230509215012306

まず、一般的に使用される API をいくつか紹介します。

  • findMany: 複数のレコードをクエリする
  • findUnique: 単一レコードをクエリします
  • 作成: レコードを作成します
  • 更新: レコードを更新します
  • 削除: レコードを削除します

これらの API を使用してルーティング方式でデータベースを操作し、インターフェースの開発を完了します。

ユーザーリストのクエリ

findMany はパラメータを渡しません。つまり、ユーザー テーブル全体のすべてのレコードをクエリし、User モデルのインスタンスのコレクションである配列を返します。

router.get('/', async ctx => {
    
    
  const users = await prisma.user.findMany()

  ctx.body = users
})

単一のユーザーをクエリする

findUniqueこのメソッドではwhere、クエリ条件を設定します。つまり、指定された ID に従ってユーザー レコードをクエリします。このメソッドは、Userモデルのインスタンスである 1 つのレコードのみを返します。

// 查询单个用户
router.get('/:id', async ctx => {
    
    
  const id = parseInt(ctx.params.id)
  const user = await prisma.user.findUnique({
    
    
    where: {
    
     id }
  })

  ctx.body = user
})

注意すべき点の 1 つは、ctx.params.id取得元はid文字列型であるため、クエリを実行する前に整数型に変換する必要があることです。

ユーザーを作成

データを挿入するために使用しますcreate。リクエスト本文から解析されたデータ、つまりUserモデルを記述するオブジェクトを data 属性に割り当てるだけです。

router.post('/', async ctx => {
    
    
  const user = ctx.request.body
  const newUser = await prisma.user.create({
    
    
    data: user
  })

  ctx.body = newUser
})

ユーザーを更新する

このメソッドを使用して、クエリ条件を設定しupdatewhereユーザーをクエリし、更新するデータを data に割り当てて更新を完了します。

router.patch('/:id', async ctx => {
    
    
  const id = parseInt(ctx.params.id)
  const updateUser = ctx.request.body

  const user = await prisma.user.update({
    
    
    where: {
    
    
      id
    },
    data: updateUser
  })

  ctx.body = user
})

ユーザーを削除する

次のメソッドを使用して、deleteレコードを削除するためのクエリ条件を直接設定します。

router.delete('/:id', async ctx => {
    
    
  const id = parseInt(ctx.params.id)
  const user = await prisma.user.delete({
    
    
    where: {
    
    
      id
    }
  })

  ctx.body = user
})

注: 更新と削除を使用する場合は、必ず where を設定してください。そうしないと、データ テーブル内のすべてのレコードが更新または削除され、非常に危険です。

テスト

ユーザーを作成:

画像-20230509215720849

ユーザーリストのクエリ:

画像-20230509215836753

ユーザーを更新します:

画像-20230509215918093

ユーザーを削除します:

画像-20230509215939149

要約する

完全なコードはここにあります。

この記事では、ユーザーの追加、削除、変更、クエリの例を通じて、Koa での Prisma の基本的な使用方法を説明します。

  1. 依存関係をインストールする
  2. プリズマの初期化
  3. Prisma スキーマの設定
  4. データベースを同期する
  5. Prismaクライアントの作成
  6. Prisma Client を使用した CRUD の実装

Prisma には優れた機能も数多くありますが、この記事では、単一のテーブルの追加、削除、変更、確認といった最も基本的な使い方を紹介します。Prisma について詳しく知るには、中国語のドキュメントサイトを読むことをお勧めします。

読んでくれてありがとう!

おすすめ

転載: blog.csdn.net/Old_Soldier/article/details/132524562