|
Язык / Среда
|
Java 17+ / JVM
|
JavaScript / Node.js
|
TypeScript (поверх Node.js)
|
|
Тип фреймворка
|
Полный backend-фреймворк с DI, MVC, REST, микросервисами
|
Минималистичный серверный фреймворк
|
Архитектурный фреймворк уровня Spring (DI, модули, контроллеры, сервисы)
|
|
Философия
|
IoC, Dependency Injection, Annotation-driven
|
Минимализм и middleware (Express philosophy)
|
«Opinionated» структура, вдохновлён Spring Boot
|
|
Создание проекта
|
spring init --dependencies=web,data-jpa
|
npm init -y && npm install express
|
npm i -g @nestjs/cli && nest new project
|
|
Точка входа
|
@SpringBootApplication + main()
|
index.js
|
main.ts с NestFactory.create(AppModule)
|
|
|
|
|
|
Запуск сервера
|
mvn spring-boot:run или gradlew bootRun
|
node index.js
|
npm run start
|
|
Структура проекта
|
src/main/java/com/example/...
|
1–2 файла, любая структура
|
src/app.module.ts, src/controllers/, src/services/
|
|
Архитектура
|
MVC + IoC Container
|
Middleware цепочки
|
MVC + IoC Container + модульность
|
|
Контроллеры
|
@RestController, @GetMapping, @PostMapping
|
app.get(), app.post()
|
@Controller(), @Get(), @Post()
|
|
Маршрутизация
|
Автоматическая через аннотации
|
Явная: app.get('/path', handler)
|
Декларативная через декораторы
|
|
|
|
|
|
ORM и работа с БД
|
Spring Data JPA (Hibernate, PostgreSQL, MySQL, MongoDB)
|
Sequelize, Prisma, Mongoose
|
TypeORM, Prisma, MikroORM (встроенная поддержка)
|
|
|
|
|
|
Dependency Injection
|
Через аннотации @Autowired, @Service, @Component
|
Отсутствует (ручное внедрение зависимостей)
|
Встроен DI-контейнер (@Injectable, @Module)
|
|
Middleware / Filters
|
HandlerInterceptor, Filters, @ControllerAdvice
|
app.use((req,res,next)=>{...})
|
@UseGuards(), @UseInterceptors(), middleware классы
|
|
Обработка ошибок
|
@ControllerAdvice + @ExceptionHandler
|
app.use(errorHandler)
|
@Catch() + Filters
|
|
Валидация
|
@Valid, @NotNull, @Size, Bean Validation
|
express-validator
|
class-validator + @Body(), @UsePipes()
|
|
Авторизация и безопасность
|
Spring Security, OAuth2, JWT, Roles
|
Passport.js, JWT
|
NestJS Passport module, JWT guard
|
|
Асинхронность
|
WebFlux (Reactor, Mono/Flux API)
|
Асинхронен по природе (callback/promise/async-await)
|
Async/await, Observables (RxJS), поддержка reactive patterns
|
|
Шаблоны / Views
|
Thymeleaf / Freemarker
|
EJS / Handlebars / Pug
|
Любой движок, чаще REST-only
|
|
Документация API
|
SpringDoc OpenAPI (Swagger UI)
|
Swagger через swagger-ui-express
|
Встроенный @nestjs/swagger
|
|
Конфигурация
|
application.yml
|
.env через dotenv
|
.env + ConfigModule
|
|
Кэширование
|
Spring Cache (Redis, Ehcache)
|
Redis middleware
|
CacheModule (Redis, memory)
|
|
Очереди / Messaging
|
Spring Cloud Stream (Kafka, RabbitMQ)
|
BullMQ, RabbitMQ libs
|
NestJS Queues (Bull), Kafka module
|
|
Миграции БД
|
Flyway / Liquibase / Hibernate auto-ddl
|
Sequelize CLI, Prisma migrate
|
TypeORM migrations, Prisma CLI
|
|
CLI / DevTools
|
Spring Boot CLI, Actuator
|
nodemon, npm scripts
|
nest generate, nest build, nest start --watch
|
|
Тестирование
|
JUnit 5, Mockito, MockMvc
|
Jest / Mocha / Supertest
|
Jest встроен + e2e тесты (@nestjs/testing)
|
|
|
|
|
|
API формат
|
JSON / XML / protobuf
|
JSON
|
JSON / GraphQL / gRPC
|
|
Docker поддержка
|
Официальный образ openjdk:17
|
Node.js образы node:20-alpine
|
Node.js + Nest CLI Dockerfile
|
|
Развёртывание
|
JAR/WAR, Docker, Kubernetes, AWS, GCP, Azure
|
Node.js runtime, Docker, PM2
|
Docker, Kubernetes, AWS Lambda
|
|
Производительность (RPS)
|
10–15k (Netty / Tomcat)
|
20–25k (на чистом Express)
|
18–22k (при DI и декораторах)
|
|
Кривая обучения
|
Средне-высокая (много аннотаций, шаблонов)
|
Низкая (5 строк до результата)
|
Средняя (похож на Spring, но TypeScript нужен)
|
|
Эко-система
|
Spring Cloud, Security, Kafka, Data, Actuator, Boot
|
Огромная NPM экосистема (плагины, middleware)
|
Nest Modules (GraphQL, Microservices, Kafka, Swagger, Testing)
|
|
Когда выбрать
|
Корпоративные backend-решения, микросервисы, сложные API
|
Простые REST API, быстрые прототипы, real-time
|
Enterprise API, микросервисы, если команда знает TypeScript
|
|
Когда не выбрать
|
Простые CRUD-проекты, pet-проекты
|
Сложные enterprise-системы
|
Маленькие прототипы, где нужен лёгкий Express
|