Prisma یک ORM متنباز برای Node.js و TypeScript است که کار با دیتابیس را برای برنامهنویسان سادهتر، ایمنتر و سریعتر میکند. به جای نوشتن کوئریهای پیچیده SQL و مدیریت دستی مایگریشنها، میتوانید ساختار داده و ارتباط بین جداول را در سطح کد مدیریت کنید.
Prisma از سه بخش اصلی تشکیل شده است:
-
Prisma Client: کوئریساز تایپسیف و خودکار
-
Prisma Migrate: سیستم مدیریت مدل داده و مایگریشن
-
Prisma Studio: رابط گرافیکی برای مشاهده و ویرایش دادهها
در این آموزش یک REST API برای اپلیکیشن ساده وبلاگ میسازیم که با TypeScript، Express، Prisma و دیتابیس PostgreSQL کار میکند.
پیشنیازها
قبل از شروع، موارد زیر باید نصب باشند:
-
Node.js نسخه 14 یا بالاتر
-
Docker (برای اجرای PostgreSQL)
-
آشنایی مقدماتی با TypeScript و REST API (مفید ولی اجباری نیست)
مرحله ۱ — ساخت پروژه TypeScript
ابتدا یک پوشه جدید بسازید:
mkdir my-blog
cd my-blog
npm init -yنصب وابستگیهای TypeScript:
npm install typescript ts-node @types/node --save-devساخت فایل تنظیمات TypeScript:
nano tsconfig.jsonمحتوا:
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}مرحله ۲ — راهاندازی PostgreSQL با Docker و Prisma
نصب Prisma CLI:
npm install prisma --save-devساخت فایل Docker Compose:
nano docker-compose.ymlversion: '3.8'
services:
postgres:
image: postgres:10.3
restart: always
environment:
- POSTGRES_USER=sammy
- POSTGRES_PASSWORD=your_password
volumes:
- postgres:/var/lib/postgresql/data
ports:
- '5432:5432'
volumes:
postgres:اجرای دیتابیس:
docker-compose up -dابتداییسازی Prisma:
npx prisma initویرایش فایل .env:
DATABASE_URL="postgresql://sammy:your_password@localhost:5432/my-blog?schema=public"مرحله ۳ — تعریف مدل داده و ساخت جداول
فایل زیر را باز کنید:
nano prisma/schema.prismaمدلها:
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}اجرای مایگریشن:
npx prisma migrate dev --name initمرحله ۴ — نصب Prisma Client
npm install @prisma/clientساخت پوشه سورس:
mkdir src
nano src/index.tsمرحله ۵ — راهاندازی سرور Express
نصب Express:
npm install express
npm install @types/express --save-devکد پایه سرور:
import { PrismaClient } from '@prisma/client'
import express from 'express'
const prisma = new PrismaClient()
const app = express()
app.use(express.json())
app.listen(3000, () => {
console.log('Server running at http://localhost:3000')
})مرحله ۶ — پیادهسازی Routeها
| متد | مسیر (Endpoint) | توضیح |
|---|---|---|
| GET | /users | دریافت لیست کاربران |
| GET | /feed | دریافت پستهای منتشرشده |
| GET | /post/:id | دریافت یک پست خاص |
| POST | /user | ساخت کاربر جدید |
| POST | /post | ساخت پست جدید |
| PUT | /post/publish/:id | انتشار یک پست |
| DELETE | /post/:id | حذف یک پست |
دریافت کاربران
app.get('/users', async (req, res) => {
const users = await prisma.user.findMany()
res.json(users)
})دریافت پستهای منتشرشده
app.get('/feed', async (req, res) => {
const posts = await prisma.post.findMany({
where: { published: true },
include: { author: true }
})
res.json(posts)
})دریافت یک پست خاص
app.get('/post/:id', async (req, res) => {
const post = await prisma.post.findUnique({
where: { id: Number(req.params.id) }
})
res.json(post)
})ساخت کاربر
app.post('/user', async (req, res) => {
const user = await prisma.user.create({ data: req.body })
res.json(user)
})ساخت پست
app.post('/post', async (req, res) => {
const { title, content, authorEmail } = req.body
const post = await prisma.post.create({
data: {
title,
content,
author: { connect: { email: authorEmail } }
}
})
res.json(post)
})انتشار پست
app.put('/post/publish/:id', async (req, res) => {
const post = await prisma.post.update({
where: { id: Number(req.params.id) },
data: { published: true }
})
res.json(post)
})حذف پست
app.delete('/post/:id', async (req, res) => {
const post = await prisma.post.delete({
where: { id: Number(req.params.id) }
})
res.json(post)
})جمعبندی
در این آموزش:
-
دیتابیس PostgreSQL را با Docker اجرا کردید
-
مدل داده را با Prisma تعریف کردید
-
جداول را با Prisma Migrate ساختید
-
یک REST API کامل با Express پیادهسازی کردید
-
عملیات CRUD را با Prisma Client انجام دادید
این ساختار پایهای برای توسعه APIهای حرفهای با Node.js و Prisma است.
