What NestJS Does
Provides out-of-the-box architecture for testable, scalable, loosely-coupled, and maintainable backend apps:
- Modules — organize code by feature
- Controllers — handle incoming HTTP requests
- Providers/Services — business logic via dependency injection
- Pipes/Guards/Interceptors — cross-cutting concerns
- Microservices — Kafka, RabbitMQ, gRPC, Redis, NATS transport
- GraphQL — code-first or schema-first
- WebSockets — real-time gateways
Architecture
Angular-inspired modular architecture: every app has a root AppModule that imports feature modules. Each feature module declares controllers and providers. DI container wires everything at startup.
AppModule
├── UsersModule (UsersController, UsersService)
├── AuthModule (AuthController, AuthService, JwtStrategy)
└── DatabaseModule (TypeOrmModule.forRoot)Self-Hosting
# Production build
npm run build
node dist/main.js
# Docker
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist ./dist
CMD ["node", "dist/main.js"]Key Features
- TypeScript-first with decorators
- Built-in DI container
- Express or Fastify HTTP adapter
- OpenAPI/Swagger auto-generation
- TypeORM/Prisma/Mongoose integrations
- CLI for scaffolding
- Testing utilities (Jest-based)
Comparison
| Framework | DI | TypeScript | Opinionated | Best For |
|---|---|---|---|---|
| NestJS | Built-in | First-class | Yes | Enterprise backends |
| Express | Manual | Optional | No | Minimal APIs |
| Fastify | Manual | Good | No | High-perf APIs |
| Koa | Manual | Optional | No | Middleware composition |
常见问题 FAQ
Q: NestJS 和 Express 的关系? A: NestJS 默认使用 Express 作为 HTTP 层,但抽象了路由/中间件,提供更高层的模块/DI 架构。可以替换为 Fastify。
Q: 性能怎么样? A: 使用 Fastify adapter 后性能接近原生 Fastify。默认 Express adapter 的开销来自抽象层。
Q: 学习曲线陡吗? A: 如果熟悉 Angular 几乎零门槛;Express 用户需要理解装饰器和 DI。
来源与致谢 Sources
- Official Docs: https://docs.nestjs.com
- GitHub: https://github.com/nestjs/nest
- License: MIT