How to connect MySQL in your backend project (NestJS + Prisma)

WILD

Administrator
Staff member
ADMIN
SELLER
SUPREME
MEMBER
Joined
Jan 21, 2025
Messages
219
Reaction score
637
Deposit
0$
Привет! Работая над бэкенд-проектом, я столкнулся с простой, но досадной проблемой — я не смог найти понятное и полное руководство по подключению MySQL к простому бэкенд-проекту .

Большинство обучающих материалов либо:

  • пропустить важные шаги
  • предполагать слишком много предварительных знаний
  • или не объясняют, почему всё работает именно так.
В этом руководстве я вам покажу:

  • Как подключиться к MySQL с помощью NestJS + Prisma
  • как это работает под капотом
  • и как использовать его в монорепозитории.

📌 Почему Prisma?​

Прежде чем начать — небольшое замечание.

Prisma — это не просто ещё один ORM. Он предоставляет следующие возможности:

  • типобезопасные запросы к базе данных
  • автоматически сгенерированный клиент на основе схемы
  • Более удобный интерфейс для разработчиков, чем у классических ORM, таких как TypeORM.
Проще говоря: меньше SQL-запросов, меньше ошибок во время выполнения, больше производительности.

Создайте проект NestJS.​

npm i -g @nestjs/clinest new my-backend-project cd my-backend-project npm install


Запустите его:

npm run start


Установите Prisma​

npm install prisma --save-devnpm install @prisma/client


Инициализация Prisma:

npx prisma init


💡 Рекомендация: всегда используйте npx prisma вместо глобального интерфейса командной строки.


📁 После инициализации вы получите:​

  • schema.prisma — схема базы данных и подключение
  • .env — переменные среды
  • prisma.config.ts — конфигурация проекта

⚙️Настройка MySQL​

По умолчанию Prisma использует PostgreSQL или SQLite. Переключимся на MySQL. Теперь откроем файл .env:

DATABASE_URL="mysql://root:password@localhost:3306/my_db"
DATABASE_USER="root"
DATABASE_PASSWORD="password"
DATABASE_NAME="my_db"
DATABASE_HOST="localhost"
DATABASE_PORT=3306


А теперь откройте файл schema.prisma:

клиент генератора {
provider = "prisma-client"
output = "../generated/prisma"
moduleFormat = "cjs"
}

база данных источника данных {
provider = "mysql"
}


Это стандартный формат подключения к MySQL в Prisma.


🧠 Создать клиент Prisma​

npx prisma generate


👉 Prisma генерирует типобезопасный клиент на основе вашей схемы.
Это означает, что ваши запросы проверяются на этапе компиляции.


🧩Создать PrismaService​

импортировать "dotenv/config";
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
import { PrismaClient } from "../generated/prisma/client";
import { Injectable } from "@nestjs/common";

@Injectable()
export class PrismaService extends PrismaClient{
конструктор(){
const adapter = new PrismaMariaDb({
хост: process.env.DATABASE_HOST,
пользователь: process.env.DATABASE_USER,
пароль: process.env.DATABASE_PASSWORD,
база данных: process.env.DATABASE_NAME,
connectionLimit: 5,
});
супер({адаптер})
}
}


💡 Почему это необходимо:

  • интегрирует Prisma в жизненный цикл Nest.
  • обеспечивает надлежащую обработку соединений
  • предотвращает утечки памяти в производственной среде

🧩Создать PrismaModule​

import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

@Module({
поставщики: [PrismaService],
экспорт: [PrismaService],
})
export class PrismaModule {}



🔌Используйте Prisma в своей работе​

Мы напишем наш сервис в конструкторе. Я покажу вам, как его использовать на примере:

import { Injectable } from '@nestjs/common';
import { PrismaService } from 'prisma/prisma.service';
import { TodoDTO } from './dto/todo.dto';

@Injectable()
export class TodoService {
constructor(private readonly todoService: PrismaService){} //это обязательно

public getOne(id:number){
return this.todoService.todo.findFirst(
{
где: {id}
}
)
}

public getAll(){
return this.todoService.todo.findMany()
}

public create(data: TodoDTO){
return this.todoService.todo.create({data: data})
}

public upgrade(id: number, data: TodoDTO){
return this.todoService.todo.update({
где: {id},
данные: данные
})
}

public delete(id:number){
return this.todoService.todo.delete(
{
где: {id}
}
)
}

}


📌 Вот как обычно используется Prisma в сервисах NestJS.


🔥Выполнить миграции​

npx prisma migrate dev --name initnpx prisma generate


🧩 Настройка монорепозитория (краткое объяснение)​

В монорепозитории:

  • Разместите Prisma в отдельном пакете/библиотеке.
  • Экспорт только услуг (не исходного клиента)
  • повторное использование в разных приложениях
Это поможет:

  • изолировать логику базы данных
  • упростить масштабирование
  • Переключение баз данных становится проще.

📚 Бонус — Официальные документы​

26a50377e7947421c9158ae61064d34e.png

Кроме того, специально для вас я включил справочную карточку, чтобы вы могли запомнить и сохранить ее для дальнейшего использования. В этой карточке я собрал все материалы, чтобы облегчить вам задачу.

Если это руководство вам помогло — поддержите публикацию.
Спасибо за внимание!
 
Top Bottom