NestJS — потужний фреймворк для створення ефективних і масштабованих серверних додатків на Node.js. Однією з його видатних особливостей є здатність безперешкодно інтегруватися з різними рішеннями для баз даних завдяки своїй модульній архітектурі. Серед багатьох доступних варіантів, TypeORM є популярним вибором для управління даними з потужною підтримкою TypeScript.
У цьому посібнику ми крок за кроком розглянемо, як інтегрувати TypeORM з додатком NestJS. Наприкінці ви матимете чітке розуміння того, як налаштувати та конфігурувати TypeORM в NestJS, і будете готові створювати власні додатки, орієнтовані на базу даних.
Зміст
- Налаштування проекту NestJS
- Встановлення TypeORM та залежностей для бази даних
- Конфігурація TypeORM
- Створення сутностей
- Опис репозиторіїв
- Використання репозиторіїв у сервісах
- Підсумок
1. Налаштування проекту NestJS
Спочатку потрібно створити новий проект NestJS.
Якщо ви ще не встановили Nest CLI, це можна зробити за допомогою:
npm install -g @nestjs/cli
Тепер створіть новий проект:
nest new my-typeorm-app
Перейдіть до директорії проекту:
cd my-typeorm-app
2. Встановлення TypeORM та залежностей для бази даних
Далі, нам потрібно встановити TypeORM та драйвер бази даних на наш вибір. Для цього посібника ми використовуватимемо PostgreSQL, але TypeORM підтримує різні бази даних, такі як MySQL, SQLite тощо.
npm install @nestjs/typeorm typeorm pg
3. Конфігурація TypeORM
Після встановлення залежностей, ми можемо налаштувати TypeORM у нашому додатку NestJS.
Відкрийте файл app.module.ts
та налаштуйте модуль TypeORM:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'test',
password: 'test',
database: 'test',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
У наведеній конфігурації, synchronize: true автоматично синхронізує схему бази даних з вашими сутностями при кожному запуску додатку.
4. Створення сутностей
Сутності (Entities) — це класи, які представляють таблиці бази даних. Створімо просту сутність User
.
Спочатку згенеруйте новий модуль та сервіс для користувачів:
nest generate module users
nest generate service users
Створіть сутність User
у новому файлі src/users/user.entity.ts
:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
Тепер імпортуйте сутність User
у вашому UsersModule
:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersService } from './users.service';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
providers: [UsersService],
})
export class UsersModule {}
5. Опис репозиторіїв
Репозиторії (Repositories) використовуються для взаємодії з базою даних.
NestJS автоматично генерує репозиторій для кожної сутності, якщо ви використовуєте метод TypeOrmModule.forFeature
.
У нашому UsersService
, ми можемо інжектувати репозиторій:
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,
) {}
async findAll(): Promise {
return this.usersRepository.find();
}
async create(user: User): Promise {
return this.usersRepository.save(user);
}
}
6. Використання репозиторіїв в контролерах
Створіть контролер для надання точок доступу до користувачів.
Використовуйте NestJS CLI для генерації контролера:
nest generate controller users
Тепер реалізуємо методи контролера:
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';
import { User } from './user.entity';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
async findAll(): Promise {
return this.usersService.findAll();
}
@Post()
async create(@Body() user: User): Promise {
return this.usersService.create(user);
}
}
Не забудьте оновити ваш UsersModule
, щоб включити UsersController
:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersService } from './users.service';
import { User } from './user.entity';
import { UsersController } from './users.controller';
@Module({
imports: [TypeOrmModule.forFeature([User])],
providers: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
7.
Збирання всього разом
З усім налаштованим, ваше застосунки тепер повинно працювати. Ви можете запустити його за допомогою:
npm run start
Ви можете протестувати API, надіславши GET і POST запити до http://localhost:3000/users
.
Ось короткий підсумок файлів, які ми створили та змінювали:
src/app.module.ts
: Налаштована конфігурація TypeORM.src/users/user.entity.ts
: Описано сутністьUser
.src/users/users.module.ts
: НалаштованоUsersModule
.src/users/users.service.ts
: РеалізованоUsersService
.src/users/users.controller.ts
: СтвореноUsersController
.
Висновок
У цій статті ми продемонстрували, як інтегрувати TypeORM з NestJS, починаючи від налаштування проєкту та конфігурації до створення сутностей, репозиторіїв та контролерів. З цією основою ви готові будувати та масштабувати свої застосунки NestJS, використовуючи TypeORM. Успіхів у програмуванні!
Перекладено з: Integrating TypeORM with NestJS: A Comprehensive Guide