
NestJS API Development Guide 01: What is NestJS?
Video
Watch the full video on YouTube:
What is NestJS?
NestJS is a progressive Node.js framework for building efficient, reliable, and scalable server side applications. It uses TypeScript by default and combines elements of Object Oriented Programming, Functional Programming, and Functional Reactive Programming.
At its core, NestJS is built on top of powerful HTTP server frameworks like Express or Fastify, providing a level of abstraction above these libraries while also exposing their APIs directly to the developer. This gives you the freedom to use the myriad of third party modules available for the underlying platform.
Why NestJS Stands Out
NestJS brings a structured approach to Node.js development that many other frameworks lack. Here are the key features that make it stand out:
Modular Architecture: NestJS uses modules to organize code into cohesive units. Each module encapsulates related components, controllers, and services, making your application easier to reason about and maintain as it grows.
Dependency Injection: One of the most powerful features of NestJS is its built in dependency injection system. Instead of manually instantiating and passing dependencies around, you simply declare what you need and the framework provides it.
Decorators and Metadata: Using TypeScript decorators, NestJS allows you to declare routes, middleware, validation, and more directly on your classes and methods. This keeps your code declarative and focused on business logic rather than boilerplate.
Built in Validation: With the ValidationPipe, NestJS integrates seamlessly with class validator and class transformer to automatically validate incoming requests at the controller boundary.
Core Building Blocks
NestJS applications are composed of several key building blocks:
Controllers
Controllers handle incoming requests and return responses to the client. They are defined using the @Controller() decorator and route handlers are decorated with @Get(), @Post(), @Put(), @Delete(), etc.
@Controller("users")
export class UsersController {
@Get()
findAll(): string {
return "This returns all users"
}
@Get(":id")
findOne(@Param("id") id: string): string {
return `This returns user ${id}`
}
}
Providers
Providers are the core concept in NestJS. Many of the basic NestJS classes may be treated as a provider including services, repositories, factories, helpers, and more. The main idea is that a provider can be injected as a dependency.
@Injectable()
export class UsersService {
private readonly users: User[] = []
findAll(): User[] {
return this.users
}
}
Modules
Modules are used to organize your application. Each NestJS application has at least one module, the root module. Modules are TypeScript classes decorated with @Module().
@Module({
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
The Ecosystem
NestJS provides official integrations for a wide range of technologies:
- Databases: TypeORM, Prisma, Mongoose, Sequelize, MikroORM
- GraphQL: Code first and schema first approaches
- WebSockets: Gateways for real time communication
- Microservices: TCP, Redis, RabbitMQ, Kafka, gRPC
- Authentication: JWT, sessions, OAuth2, Passport
- Testing: Jest with built in testing utilities
This rich ecosystem means you rarely need to look outside the framework for common application needs.
Who Should Use NestJS?
NestJS is an excellent choice if you are building any kind of server side application that needs to scale, whether it is a REST API, a GraphQL server, a microservice, or a real time application. Developers coming from Angular will feel right at home because NestJS shares many architectural patterns with Angular including modules, decorators, and dependency injection.
For backend developers who want structure, type safety, and a rich ecosystem without giving up the flexibility of Node.js, NestJS provides the best of both worlds.
Recommendations
This post is part of a NestJS API development series. Check out the other entries:
- Part 02: Requirements - What you need to start building NestJS APIs
- Part 03: First Project - Creating and running your first NestJS project
- Part 04: Git Repository Setup - Configuring Git and GitHub for your project
