簡単で型安全なデータベースアクセス
Expressサーバーで

JavaScriptとTypeScriptのためのより良いORMであるPrismaを使って、ExpressアプリでMySQL、PostgreSQL、SQL Serverデータベースからデータをクエリ。

tech

Prismaとは?

Prismaはデータ操作を簡単にします!型安全なNode.js & TypeScript ORM、グローバルデータベースキャッシュ、接続プーリング、リアルタイムデータベースイベントを提供します。

クエリ
// Creating a new record
await prisma.user.create({
firstName: “Alice”,
email: “alice@prisma.io”
})
テーブル
id firstName email
1 Bobby bobby@tables.io
2 Nilufar nilu@email.com
3 Jürgen jums@dums.edu
4 Alice alice@prisma.io

PrismaとExpressの連携

Prisma ORMは、Expressサーバーでデータベースをクエリするために使用される次世代ORMです。プレーンなSQLクエリ、knex.jsのようなクエリビルダー、またはTypeORM、MikroORM、Sequelizeのような従来のORMの代替として使用できます。
Prisma ORMはRESTおよびGraphQL APIの構築に使用でき、マイクロサービスとモノリシックアーキテクチャの両方とスムーズに統合できます。

追加ツールでPrisma ORMの使用をさらに強化できます
Prisma Accelerateは、データベースクエリを高速化するグローバルデータベースキャッシュおよびスケーラブルな接続プールです。
Prisma Pulseを使用すると、リアクティブなリアルタイムアプリケーションを型安全な方法で構築できます。

PrismaとExpressのコード例

Prismaは、Expressと完全に統合された便利なデータベースアクセスレイヤーを提供します。

以下のコードは、APIサーバーを構築するためにExpressを使用する際のPrismaのさまざまな使用方法を示しています。

REST API

REST API

Prismaは、ルートハンドラー内でデータベースのデータの読み取りと書き込みに使用されます。

1import express from 'express'
2import { PrismaClient } from '@prisma/client'
3
4const prisma = new PrismaClient()
5const app = express()
6
7app.get('/feed', async (req, res) => {
8 const posts = await prisma.post.findMany({
9 where: { published: true },
10 include: { author: true },
11 })
12 res.json(posts)
13})
14
15app.post('/post', async (req, res) => {
16 const { title, content, authorEmail } = req.body
17 const post = await prisma.post.create({
18 data: {
19 title,
20 content,
21 published: false,
22 author: { connect: { email: authorEmail } },
23 },
24 })
25 res.json(post)
26})
27
28app.put('/publish/:id', async (req, res) => {
29 const { id } = req.params
30 const post = await prisma.post.update({
31 where: { id },
32 data: { published: true },
33 })
34 res.json(post)
35})
36
37app.delete('/user/:id', async (req, res) => {
38 const { id } = req.params
39 const user = await prisma.user.delete({
40 where: {
41 id,
42 },
43 })
44 res.json(user)
45})
46
47const server = app.listen(3000)
GraphQL API
Prismaスキーマ

REST API

Prismaは、ルートハンドラー内でデータベースのデータの読み取りと書き込みに使用されます。

1import express from 'express'
2import { PrismaClient } from '@prisma/client'
3
4const prisma = new PrismaClient()
5const app = express()
6
7app.get('/feed', async (req, res) => {
8 const posts = await prisma.post.findMany({
9 where: { published: true },
10 include: { author: true },
11 })
12 res.json(posts)
13})
14
15app.post('/post', async (req, res) => {
16 const { title, content, authorEmail } = req.body
17 const post = await prisma.post.create({
18 data: {
19 title,
20 content,
21 published: false,
22 author: { connect: { email: authorEmail } },
23 },
24 })
25 res.json(post)
26})
27
28app.put('/publish/:id', async (req, res) => {
29 const { id } = req.params
30 const post = await prisma.post.update({
31 where: { id },
32 data: { published: true },
33 })
34 res.json(post)
35})
36
37app.delete('/user/:id', async (req, res) => {
38 const { id } = req.params
39 const user = await prisma.user.delete({
40 where: {
41 id,
42 },
43 })
44 res.json(user)
45})
46
47const server = app.listen(3000)

PrismaとExpressを選ぶ理由

柔軟なアーキテクチャ

マイクロサービスまたはモノリシックアプリを構築している場合でも、Prismaはスタックに完全に適合します。

高い生産性

Prismaは、データベースクエリのオートコンプリート、優れた開発者体験、完全な型安全性を提供します。

型安全なデータベースクライアント

Prisma Clientは、JavaScriptでもオートコンプリートのような利点がある、完全に型安全なデータベースクエリを保証します。

直感的なデータモデリング

Prismaの宣言的モデリング言語はシンプルで、データベーススキーマを直感的に記述できます。

簡単なデータベースマイグレーション

宣言的なPrismaスキーマから、予測可能でカスタマイズ可能なSQLマイグレーションを生成します。

API構築用に設計

Prisma Clientは、一般的なAPI機能(例:ページネーション、フィルターなど)のクエリを提供することで、ボイラープレートを削減します。

注目のPrisma & Expressの例

PrismaとPostgreSQLでREST APIを構築する方法

Express、Prisma、PostgreSQLを使用したREST API構築の包括的なチュートリアル

REST APIスターターキット

SQLiteデータベースを使用したREST APIのすぐに実行できるサンプルプロジェクト

GraphQL APIスターターキット

SQLiteデータベースを使用したGraphQL APIのすぐに実行できるサンプルプロジェクト