Введение в NestJS
Что такое NestJS
NestJS — прогрессивный фреймворк для Node.js на TypeScript. Вдохновлён Angular и Spring.
Что даёт:
- Строгая архитектура — модули, контроллеры, сервисы.
- DI-контейнер — из коробки.
- TypeScript-first — типы везде.
- Декораторы — понятный синтаксис.
- Готовые интеграции — TypeORM, Prisma, GraphQL, WebSocket.
Зачем NestJS
Проблема Express/Fastify:
- Нет структуры — каждый проект уникален.
- Ручное внедрение зависимостей.
- Сложно масштабировать команду.
NestJS даёт:
- Единый стиль — любой проект на NestJS похож.
- DI — как в Spring/Angular.
- Модульность — изолированные куски.
- Тестируемость — мокать легко.
- Документация Swagger — из коробки.
Сравнение с другими
| Express | Fastify | NestJS | |
|---|---|---|---|
| Структура | Нет | Нет | Есть |
| DI | Нет | Нет | Есть |
| TypeScript | Опционально | Опционально | Обязательно |
| Скорость | Средняя | Высокая | Высокая |
| Кривая обучения | Низкая | Низкая | Высокая |
NestJS под капотом использует Express или Fastify — можно переключать.
Основные концепции
Три кита NestJS:
- Модули (
@Module) — группировка. - Контроллеры (
@Controller) — HTTP-роуты. - Сервисы (
@Injectable) — бизнес-логика.
Первый пример
Контроллер:
import { Controller, Get } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get()
findAll(): string {
return 'Список пользователей';
}
}
@Controller('users') — префикс /users.
@Get() — метод GET /users.
Модуль
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
@Module({
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
Модуль связывает контроллеры и сервисы.
Сервис
import { Injectable } from '@nestjs/common';
@Injectable()
export class UsersService {
private users = [{ id: 1, name: 'Иван' }];
findAll() {
return this.users;
}
}
@Injectable() — может быть внедрён в другие классы.
Точка входа
src/main.ts:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
NestFactory — создаёт приложение.
Корневой модуль
src/app.module.ts:
import { Module } from '@nestjs/common';
import { UsersModule } from './users/users.module';
@Module({
imports: [UsersModule],
})
export class AppModule {}
Всё начинается с корневого модуля.
Установка
CLI:
npm install -g @nestjs/cli
nest new my-app
Или через npx:
npx @nestjs/cli new my-app
Выбрать npm / yarn / pnpm.
Структура проекта
my-app/
├── src/
│ ├── main.ts # точка входа
│ ├── app.module.ts # корневой модуль
│ ├── app.controller.ts
│ └── app.service.ts
├── test/
├── package.json
├── tsconfig.json
└── nest-cli.json
Команды CLI
nest new my-app # создать проект
nest generate module users # создать модуль
nest generate controller users
nest generate service users
nest generate resource users # всё сразу + CRUD
nest start # запустить
nest start --watch # с перезагрузкой
nest build # собрать
nest test # тесты
Сокращения:
nest g module users
nest g controller users
nest g service users
nest g resource users
Структура модуля
nest g resource users создаёт:
src/users/
├── dto/
│ ├── create-user.dto.ts
│ └── update-user.dto.ts
├── entities/
│ └── user.entity.ts
├── users.controller.ts
├── users.service.ts
└── users.module.ts
Полный CRUD — одна команда.
Плюсы NestJS
- Единая архитектура — любой проект похож.
- TypeScript-first — типы везде.
- DI — как в серьёзных фреймворках.
- Модули — можно выделить в пакеты.
- Тестируемость — unit + e2e.
- Swagger — автодокументация.
- Микросервисы — из коробки.
Минусы
- Кривая обучения — декораторы, DI, модули.
- Boilerplate — много файлов.
- Overhead для маленьких проектов.
- Магия — сложно отлаживать без понимания.
Когда использовать
NestJS — если:
- Средний/крупный проект.
- Команда — нужен единый стиль.
- Микросервисы.
- Enterprise.
- GraphQL, WebSocket, очереди.
Express/Fastify — если:
- Маленький API.
- Прототип.
- Скрипт, лямбда.
- Полный контроль над стеком.
Что дальше
- Установка и первый проект
- Модули
- Контроллеры
- Сервисы и DI
- DTO и валидация
- Pipes, Guards, Interceptors
- Работа с БД (TypeORM/Prisma)
- Аутентификация JWT
- Конфигурация
- Тестирование
- Swagger и документация
- Деплой
Итог
- NestJS — TypeScript-фреймворк.
- Angular + Spring вдохновение.
- Модули, контроллеры, сервисы — основа.
- DI — из коробки.
- CLI — генерирует код.
- Для крупных проектов — идеально.
Дальше — установка и первый проект.