Поиск по сайту
Ctrl + K
Вопросы по Nest.js

Как NestJS обрабатывает взаимодействие с базами данных и какие базы данных поддерживаются?

NestJS — это прогрессивный фреймворк для создания серверных приложений на Node.js, который использует TypeScript. Одной из важных возможностей NestJS является его возможность взаимодействовать с различными базами данных. Для работы с базами данных в NestJS используются модули, позволяющие интегрировать различные ORM (Object-Relational Mapping) библиотеки.

Основные ORM, поддерживаемые NestJS:

  • TypeORM: Поддерживает множество баз данных, таких как MySQL, PostgreSQL, SQLite, Microsoft SQL Server и другие. TypeORM является одним из самых популярных решений для работы с реляционными базами данных.
  • Sequelize: Также поддерживает несколько типов баз данных, включая MySQL, PostgreSQL, MariaDB и SQLite. Sequelize предоставляет богатый функционал для работы с асинхронными данными.
  • Mongoose: Это решение для работы с MongoDB, документно-ориентированной NoSQL базой данных. Mongoose позволяет легко управлять схемами и данными.
  • Установка и использование TypeORM в NestJS:

    Давайте рассмотрим, как использовать TypeORM для взаимодействия с базой данных. Для начала вам необходимо установить необходимые пакеты:

    npm install --save @nestjs/typeorm typeorm mysql2
    

    Конфигурация TypeORM в NestJS

    Вы можете настроить TypeORM в вашем приложении NestJS следующим образом:

    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { User } from './user.entity';
    import { UsersService } from './users.service';
    import { UsersController } from './users.controller';
    
    @Module({
      imports: [
        TypeOrmModule.forRoot({
          type: 'mysql', // тип базы данных
          host: 'localhost',
          port: 3306,
          username: 'test',
          password: 'test',
          database: 'test',
          entities: [User],
          synchronize: true,
        }),
        TypeOrmModule.forFeature([User]),
      ],
      controllers: [UsersController],
      providers: [UsersService],
    })
    export class AppModule {}
    

    Создание сущности User

    Теперь давайте создадим сущность User, которая будет отражать структуру таблицы в базе данных:

    import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
    
    @Entity()
    export class User {
      @PrimaryGeneratedColumn()
      id: number;
    
      @Column()
      name: string;
    
      @Column()
      age: number;
    }
    

    Создание сервиса для взаимодействия с данными

    Теперь создадим сервис для управления пользователями, который будет использовать TypeORM для выполнения CRUD операций:

    import { Injectable } from '@nestjs/common';
    import { InjectRepository } from '@nestjs/typeorm';
    import { Repository } from 'typeorm';
    import { User } from './user.entity';
    
    @Injectable()
    export class UsersService {
      constructor(
        @InjectRepository(User)
        private usersRepository: Repository<User>,
      ) {}
    
      findAll(): Promise<User[]> {
        return this.usersRepository.find();
      }
    
      findOne(id: number): Promise<User> {
        return this.usersRepository.findOneBy({ id });
      }
    
      async remove(id: number): Promise<void> {
        await this.usersRepository.delete(id);
      }
    }
    

    Резюме

    NestJS предоставляет мощные инструменты для работы с базами данных через интеграцию с ORM. TypeORM является одним из наиболее часто используемых решений благодаря своей гибкости и поддержке множества баз данных. Вы также можете легко интегрировать другие ORM, такие как Sequelize и Mongoose, в зависимости от ваших потребностей.

    С помощью вышеописанных шагов, вы сможете настроить взаимодействие с базой данных в своем приложении на NestJS, что позволит вам сосредоточиться на бизнес-логике вашего приложения, не беспокоясь о деталях работы с базой данных.