Вопросы по Nest.js

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

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

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

  1. TypeORM: Поддерживает множество баз данных, таких как MySQL, PostgreSQL, SQLite, Microsoft SQL Server и другие. TypeORM является одним из самых популярных решений для работы с реляционными базами данных.
  2. Sequelize: Также поддерживает несколько типов баз данных, включая MySQL, PostgreSQL, MariaDB и SQLite. Sequelize предоставляет богатый функционал для работы с асинхронными данными.
  3. 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, что позволит вам сосредоточиться на бизнес-логике вашего приложения, не беспокоясь о деталях работы с базой данных.