رفتن به محتوای اصلی
دیدگاه کلود | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش ساخت REST API با Prisma و PostgreSQL در Node.js

آموزش ساخت REST API با Prisma و PostgreSQL در Node.js

Prisma یک ORM متن‌باز برای Node.js و TypeScript است که کار با دیتابیس را برای برنامه‌نویسان ساده‌تر، ایمن‌تر و سریع‌تر می‌کند. به جای نوشتن کوئری‌های پیچیده SQL و مدیریت دستی مایگریشن‌ها، می‌توانید ساختار داده و ارتباط بین جداول را در سطح کد مدیریت کنید.

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.yml
 
version: '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ها

دریافت کاربران

 
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 است.