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

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

آموزش ها
4 دقیقه مطالعه

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

ابتدا یک پوشه جدید بسازید:

3 خط
mkdir my-blog
cd my-blog
npm init -y
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

نصب وابستگی‌های TypeScript:

npm install typescript ts-node @types/node --save-dev
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساخت فایل تنظیمات TypeScript:

nano tsconfig.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

محتوا:

9 خط
{
  "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
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید
14 خط
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
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

مدل‌ها:

15 خط
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
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساخت پوشه سورس:

2 خط
mkdir src
nano src/index.ts
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

مرحله ۵ — راه‌اندازی سرور Express

نصب Express:

2 خط
npm install express
npm install @types/express --save-dev
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

کد پایه سرور:

11 خط
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حذف یک پست

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

4 خط
app.get('/users', async (req, res) => {
  const users = await prisma.user.findMany()
  res.json(users)
})
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

دریافت پست‌های منتشرشده

7 خط
app.get('/feed', async (req, res) => {
  const posts = await prisma.post.findMany({
    where: { published: true },
    include: { author: true }
  })
  res.json(posts)
})
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

دریافت یک پست خاص

6 خط
app.get('/post/:id', async (req, res) => {
  const post = await prisma.post.findUnique({
    where: { id: Number(req.params.id) }
  })
  res.json(post)
})
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساخت کاربر

4 خط
app.post('/user', async (req, res) => {
  const user = await prisma.user.create({ data: req.body })
  res.json(user)
})
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساخت پست

11 خط
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)
})
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

انتشار پست

7 خط
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)
})
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

حذف پست

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

زیرساخت ابری برای اجرای همین آموزش

سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

ادامه یادگیری:Docker·Ubuntu·VPS