## Bases & syntaxe
### Créer un nouveau projet NestJS
```bash
nest new project-name
Créé un nouveau projet NestJS.
Définir un contrôleur
@Controller('users')
export class UsersController {
@Get()
findAll() {
return 'This action returns all users';
}
}
Définit un contrôleur avec une route GET pour récupérer tous les utilisateurs.
Structures de données
Utiliser l'interface pour définir une structure de données
export interface User {
id: number;
name: string;
email: string;
}
Déclare une interface
Userpour structurer les données des utilisateurs.
Utiliser le DTO (Data Transfer Object)
export class CreateUserDto {
@IsString()
readonly name: string;
@IsEmail()
readonly email: string;
@IsInt()
readonly age?: number;
}
Crée un DTO
CreateUserDtopour transférer des données lors de la création d'un utilisateur.
Fonctions & méthodes essentielles
Utiliser le décorateur @Injectable()
@Injectable()
export class UsersService {
private users: User[] = [];
findAll(): User[] {
return this.users;
}
findOne(id: number): User {
return this.users.find(user => user.id === id);
}
}
Définit un service
UsersServiceavec des méthodes pour gérer les utilisateurs.
Utiliser le décorateur @Inject()
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll(): User[] {
return this.usersService.findAll();
}
}
Injecte le service
UsersServicedans un contrôleur.
Patterns courants
Utiliser l'architecture MVC (Model-View-Controller)
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll(): User[] {
return this.usersService.findAll();
}
@Post()
create(@Body() createUserDto: CreateUserDto): User {
return this.usersService.create(createUserDto);
}
}
@Injectable()
export class UsersService {
private users: User[] = [];
findAll(): User[] {
return this.users;
}
findOne(id: number): User {
return this.users.find(user => user.id === id);
}
create(createUserDto: CreateUserDto): User {
const user: User = {
id: Date.now(),
...createUserDto,
};
this.users.push(user);
return user;
}
}
Implémente l'architecture MVC avec des contrôleurs, services et modèles.
Opérations avancées
Utiliser la pagination
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll(@Query() query: PaginationQuery): User[] {
const { page = 1, limit = 10 } = query;
return this.usersService.findAll(page, limit);
}
}
@Injectable()
export class UsersService {
private users: User[] = [];
findAll(page: number, limit: number): User[] {
const startIndex = (page - 1) * limit;
const endIndex = page * limit;
return this.users.slice(startIndex, endIndex);
}
}
Implémente la pagination pour les utilisateurs.
Utiliser le middleware
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log(`Request...`);
next();
}
}
Crée un middleware
LoggerMiddlewarepour enregistrer les requêtes.
Debugging & outils
Utiliser l'inspecteur de debug
npm run dev -- --debug-brk
Lance le développement avec un point d'arrêt initial.
Utiliser les logs
@Injectable()
export class UsersService {
private users: User[] = [];
findAll(): User[] {
console.log('Fetching all users');
return this.users;
}
findOne(id: number): User {
console.log(`Finding user with id ${id}`);
return this.users.find(user => user.id === id);
}
}
Ajoute des logs pour déboguer le code.
Utiliser Postman
- Ouvrez Postman.
- Créez une nouvelle requête GET à l'URL de votre application (par exemple, `http://localhost:3000/users`).
- Enregistrez et exécutez la requête pour tester le contrôleur `UsersController`.
Utilisez Postman pour tester les routes NestJS.