Setup & CLI
Installation
Install the NestJS CLI globally.
Terminal
npm i -g @nestjs/cliNew Project
Create a new NestJS project.
Terminal
nest new project-nameGenerate Resource
Generate a new CRUD resource (module, controller, service, etc).
Terminal
nest g resource usersControllers
Basic Controller
Define a controller with a route prefix.
typescript
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}Request Object
Access the request object using the @Req() decorator.
typescript
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
@Controller('cats')
export class CatsController {
@Get()
findAll(@Req() request: Request): string {
return 'This action returns all cats';
}
}Route Parameters
Access dynamic route parameters.
typescript
import { Controller, Get, Param } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns a #${id} cat`;
}
}Providers
Basic Service
Create a simple service.
typescript
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
findAll(): Cat[] {
return this.cats;
}
}Dependency Injection
Inject a service into a controller.
typescript
import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
}Modules
Feature Module
Define a module and register controllers and providers.
typescript
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService],
})
export class CatsModule {}Middleware
Functional Middleware
Create a simple functional middleware.
typescript
import { Request, Response, NextFunction } from 'express';
export function logger(req: Request, res: Response, next: NextFunction) {
console.log(`Request...`);
next();
};