У сучасній веб-розробці важливо забезпечити ефективну взаємодію з базою даних. У цьому пості ми розглянемо три популярні рішення для роботи з PostgreSQL у Next.js: Prisma, TypeORM та pg-promise. Кожен із цих інструментів має свої особливості та може бути корисним у різних випадках.
1. Prisma: ORM нового покоління
Prisma — це ORM (Object-Relational Mapping), який надає зручний інтерфейс для роботи з базами даних, такими як PostgreSQL, MySQL, SQLite та інші. Він дозволяє автоматично генерувати типізовані SQL-запити та взаємодіяти з базою даних за допомогою JavaScript/TypeScript.
Встановлення та налаштування Prisma
Для початку роботи з Prisma необхідно встановити бібліотеку та ініціалізувати проект:
|
1 2 3 |
npm install @prisma/client npm install prisma --save-dev npx prisma init |
Це створить конфігураційні файли та структуру директорій для Prisma. Тепер ви можете визначити свої моделі в файлі schema.prisma:
|
1 2 3 4 5 |
model Role { id Int @id @default(autoincrement()) name String guardName String } |
Створення міграцій
Для створення міграцій використовується команда:
|
1 |
npx prisma migrate dev --name init |
Приклад використання API маршрутів у Next.js
Для взаємодії з базою даних через Prisma можна створити API маршрут у Next.js:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); export default async function handler(req, res) { if (req.method === 'POST') { const { name, guardName } = req.body; const role = await prisma.role.create({ data: { name, guardName }, }); res.status(201).json(role); } else { res.status(405).json({ message: 'Method not allowed' }); } } |
2. TypeORM: Потужний ORM для TypeScript та JavaScript
TypeORM — це ORM, який підтримує декілька типів баз даних, включаючи PostgreSQL. Він надає потужні можливості для створення міграцій, управління моделями та взаємодії з базою даних.
Встановлення та налаштування TypeORM
Для початку роботи з TypeORM необхідно встановити необхідні пакети:
|
1 |
npm install typeorm reflect-metadata pg |
Створення моделей та міграцій
Приклад визначення моделі та налаштування підключення:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// entity/Role.ts import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() export class Role { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() guardName: string; } // data-source.ts import { DataSource } from 'typeorm'; import { Role } from './entity/Role'; export const AppDataSource = new DataSource({ type: 'postgres', host: 'localhost', port: 5432, username: 'yourusername', password: 'yourpassword', database: 'yourdatabase', entities: [Role], synchronize: true, }); |
Приклад використання API маршрутів у Next.js
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import { AppDataSource } from '../../data-source'; import { Role } from '../../entity/Role'; export default async function handler(req, res) { if (req.method === 'POST') { const { name, guardName } = req.body; const roleRepository = AppDataSource.getRepository(Role); const role = new Role(); role.name = name; role.guardName = guardName; await roleRepository.save(role); res.status(201).json(role); } else { res.status(405).json({ message: 'Method not allowed' }); } } |
3. pg-promise: Легка бібліотека для роботи з PostgreSQL
pg-promise — це легка бібліотека для роботи з PostgreSQL у Node.js. Вона не є ORM, але забезпечує зручний інтерфейс для виконання SQL-запитів.
Встановлення pg-promise
Для початку роботи з pg-promise необхідно встановити пакет:
|
1 |
npm install pg-promise |
Приклад використання
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// db.js import pgPromise from 'pg-promise'; const pgp = pgPromise(); const db = pgp('postgres://user:password@localhost:5432/mydatabase'); export default db; // api/roles.js import db from '../../db'; export default async function handler(req, res) { if (req.method === 'POST') { const { name, guardName } = req.body; const role = await db.one('INSERT INTO roles(name, guard_name) VALUES($1, $2) RETURNING *', [name, guardName]); res.status(201).json(role); } else { res.status(405).json({ message: 'Method not allowed' }); } } |
Висновок
У цьому пості ми розглянули три різні підходи до роботи з PostgreSQL у Next.js: Prisma, TypeORM та pg-promise. Вибір інструмента залежить від потреб вашого проекту. Якщо вам потрібен високий рівень абстракції та типізація, Prisma буде ідеальним вибором. TypeORM також надає потужний набір інструментів, але з більшою гнучкістю. Якщо ж ви хочете максимального контролю над SQL-запитами, pg-promise буде чудовим рішенням.
Сподіваємося, що цей пост допоміг вам зрозуміти різницю між цими інструментами та обрати найбільш підходящий для вашого проекту.