Как NestJS обрабатывает взаимодействие с базами данных и какие базы данных поддерживаются?
NestJS — это прогрессивный фреймворк для создания серверных приложений на Node.js, который использует TypeScript. Одной из важных возможностей NestJS является его возможность взаимодействовать с различными базами данных. Для работы с базами данных в NestJS используются модули, позволяющие интегрировать различные ORM (Object-Relational Mapping) библиотеки.
Основные ORM, поддерживаемые NestJS:
Установка и использование 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, что позволит вам сосредоточиться на бизнес-логике вашего приложения, не беспокоясь о деталях работы с базой данных.