DevGang
Авторизоваться

Установление соединения с PostgreSQL с помощью Prisma в NestJS: исчерпывающее руководство с примером API-закладок

В современной веб-разработке установка надежного и эффективного соединения с базой данных имеет решающее значение для создания масштабируемых и поддерживаемых приложений. NestJS, популярный бэкенд-фреймворк для Node.js, предлагает обширную экосистему для создания API и микросервисов. В сочетании с Prisma, продвинутым набором инструментов для работы с базами данных, и Docker, платформой для контейнеризации приложений, можно получить оптимизированную среду разработки для приложений, управляемых базами данных. В этом руководстве мы рассмотрим процесс создания соединения с PostgreSQL с помощью Prisma на базе NestJS в среде Docker. Для демонстрации реализации мы также создадим API-закладку в качестве примера.

Оглавление

  1. Введение
  2. Предварительные условия
  3. Установка проекта NestJS
  4. Настройка Docker для PostgreSQL
  5. Установка и настройка Prisma
  6. Создание соединения с PostgreSQL с помощью Prisma
  7. Создание API-закладок с помощью Prisma
  8. Запуск приложения

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.

Источник:

#NodeJS #TypeScript #NestJS
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу