backend
nestjsnodejstypescriptapidecorators
nestjs
Creates Node.js server-side applications with NestJS, modules, dependency injection, and decorators. Use for enterprise-grade Node.js APIs.
Models: sonnetopus
NestJS
Progressive Node.js framework with TypeScript, decorators, and DI.
Quick Start
npm i -g @nestjs/cli && nest new my-api
cd my-api && npm run start:devCore Concepts
Modules
@Module({ imports: [UsersModule], controllers: [AppController], providers: [AppService] })
export class AppModule {}Controllers
@Controller('users')
export class UsersController {
@Get() findAll() { return this.usersService.findAll() }
@Post() @Body() create(dto: CreateUserDto) { return this.usersService.create(dto) }
}Providers (Services)
@Injectable()
export class UsersService {
private users: User[] = []
findAll() { return this.users }
create(dto: CreateUserDto) { const user = { id: Date.now(), ...dto }; this.users.push(user); return user }
}When to Use
- Enterprise TypeScript APIs
- Microservices with NATS/RabbitMQ
- GraphQL + REST hybrid APIs
- Projects needing strong structure
Step-by-Step
1. Init: `nest new project`
2. Generate: `nest g module users`, `nest g controller users`, `nest g service users`
3. Define entities and DTOs
4. Run: `npm run start:dev`
Examples
// Full module wired with DI: controller + provider + repository
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
// Validation DTO with class-validator
import { IsEmail, IsString, MinLength } from 'class-validator';
export class CreateUserDto {
@IsEmail() email!: string;
@IsString() @MinLength(2) name!: string;
}# Generate a module with CRUD scaffold, then hit the endpoint
nest g resource users --no-spec
curl http://localhost:3000/users
curl -X POST http://localhost:3000/users -H "content-type: application/json" -d '{"email":"a@b.c","name":"Alice"}'Best Practices
- Organize by feature modules with clear providers and controllers.
- Use DTOs and ValidationPipe for typed request/response contracts.
- Inject services via constructor DI; keep controllers thin.
- Use interceptors for logging, guards for auth, and filters for errors.
- Prefer async handlers and non-blocking database access.
- Write e2e tests with supertest against the full Nest app.
Troubleshooting
- DI errors: verify providers are registered in the right module.
- Validation not firing: ensure ValidationPipe is applied globally.
- Circular imports: use forwardRef() and split the module.
- Slow handlers: move heavy work to a queue or cache results.
Validation
1. Server starts on port 3000
2. CRUD endpoints respond correctly
3. Dependency injection resolves providers