Установление соединения с PostgreSQL с помощью Prisma в NestJS: исчерпывающее руководство с примером API-закладок
В современной веб-разработке установка надежного и эффективного соединения с базой данных имеет решающее значение для создания масштабируемых и поддерживаемых приложений. NestJS, популярный бэкенд-фреймворк для Node.js, предлагает обширную экосистему для создания API и микросервисов. В сочетании с Prisma, продвинутым набором инструментов для работы с базами данных, и Docker, платформой для контейнеризации приложений, можно получить оптимизированную среду разработки для приложений, управляемых базами данных. В этом руководстве мы рассмотрим процесс создания соединения с PostgreSQL с помощью Prisma на базе NestJS в среде Docker. Для демонстрации реализации мы также создадим API-закладку в качестве примера.
Оглавление
- Введение
- Предварительные условия
- Установка проекта NestJS
- Настройка Docker для PostgreSQL
- Установка и настройка Prisma
- Создание соединения с PostgreSQL с помощью Prisma
- Создание API-закладок с помощью Prisma
- Запуск приложения
1. Введение
NestJS - это мощный и расширяемый фреймворк, позволяющий разработчикам создавать эффективные, масштабируемые и модульные серверные приложения. Prisma, в свою очередь, упрощает доступ к базам данных благодаря безопасному с точки зрения типов и построения запросов API. Интеграция этих технологий в среду Docker позволяет обеспечить согласованную разработку и развертывание на различных платформах.
2. Предварительные условия
Прежде чем приступить к работе, убедитесь, что в вашей системе установлены следующие предварительные условия:
- Node.js и npm: Для запуска приложения NestJS.
- Docker: Для контейнеризации базы данных PostgreSQL.
- Nest CLI: предназначен для генерации файлов проекта NestJS.
- Visual Studio Code (или любой другой удобный редактор кода): Для написания и редактирования кода.
3. Настройка проекта NestJS
Начнем с создания нового проекта NestJS. Откройте терминал и выполните следующие команды:
# Install the Nest CLI globally (if already installed ignore this command)
npm install -g @nestjs/cli
# Create a new NestJS project
nest new nest-prisma-bookmark-api
Перейдите в директорию проекта:
cd nest-prisma-bookmark-api
4. Настройка Docker для PostgreSQL
Для обеспечения согласованного окружения базы данных мы будем использовать Docker для создания контейнера PostgreSQL. Создайте в корне директории проекта файл docker-compose.yml
со следующим содержанием:
version: '3.8'
services:
postgres:
image: postgres:latest
environment:
POSTGRES_USER: nestjs
POSTGRES_PASSWORD: nestjs_password
POSTGRES_DB: bookmark_db
ports:
- '5432:5432'
networks:
- postgres_network
networks:
- postgres_network
Эта конфигурация устанавливает контейнер PostgreSQL с пользователем, паролем и именем базы данных.
5. Установка и настройка Prisma
Prisma упрощает взаимодействие с базами данных, генерируя безопасный с точки зрения типов клиент на основе вашей модели данных. Чтобы установить Prisma, выполните команду:
npm install @prisma/cli
Выполните инициализацию Prisma:
npx prisma init
Следуя подсказкам, выберите базу данных PostgreSQL, настроенную с помощью Docker. В результате будет создана папка prisma, содержащая конфигурацию базы данных.
6. Создание соединения с PostgreSQL с помощью Prisma
Откройте файл prisma/schema.prisma и определите модель данных. Для нашего примера API-закладки создадим модель Bookmark:
model Bookmark {
id Int @id @default(autoincrement())
title String
url String
createdAt DateTime @default(now())
}
После определения схемы примените изменения к базе данных, выполнив команду:
npx prisma migrate dev
В результате будут сгенерированы необходимые таблицы базы данных.
7. Построение API-закладок с помощью Prisma
Создайте новый модуль для API-закладок:
nest generate module bookmark
Внутри сгенерированного модуля закладок создайте файл bookmark.entity.ts
со следующим содержимым:
import { Prisma } from '.prisma/client';
export class Bookmark implements Prisma.BookmarkCreateInput {
id?: number;
title: string;
url: string;
createdAt?: Date;
}
Теперь создайте файл bookmark.service.ts
в рамках того же модуля:
import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';
import { Bookmark } from './bookmark.entity';
@Injectable()
export class BookmarkService {
constructor(private readonly prisma: PrismaService) {}
async create(data: Bookmark): Promise<Bookmark> {
return this.prisma.bookmark.create({
data,
});
}
async findAll(): Promise<Bookmark[]> {
return this.prisma.bookmark.findMany();
}
}
Наконец, создайте файл bookmark.controller.ts
внутри модуля:
import { Controller, Get, Post, Body } from '@nestjs/common';
import { BookmarkService } from './bookmark.service';
import { Bookmark } from './bookmark.entity';
@Controller('bookmark')
export class BookmarkController {
constructor(private readonly bookmarkService: BookmarkService) {}
@Post()
async create(@Body() bookmarkData: Bookmark): Promise<Bookmark> {
return this.bookmarkService.create(bookmarkData);
}
@Get()
async findAll(): Promise<Bookmark[]> {
return this.bookmarkService.findAll();
}
}
8. Запуск приложения
После того как API-закладки реализованы, настало время запустить приложение. Запустите контейнер PostgreSQL с помощью Docker Compose:
docker compose up -d
Затем запустите приложение NestJS:
npm run start:dev
Ваше приложение NestJS с интеграцией Prisma и API Bookmark теперь работает.
Доступ к API можно получить по адресу http://localhost:3000/bookmark.
Заключение
В этой статье мы рассмотрели процесс создания соединения с PostgreSQL с помощью Prisma в приложении NestJS. Объединение этих технологий с Docker позволяет создать согласованную и эффективную среду разработки. Пример с API Bookmark демонстрирует бесшовную интеграцию Prisma и NestJS, позволяя создавать мощные и масштабируемые приложения, управляемые базами данных.
Вот ссылка на пример репозитория проекта для более конкретной демонстрации концепций, рассматриваемых в этой статье: Github Repo.