giuseppe-trisciuoglio/nestjs-best-practices (NestJS-Best Practices)
Bietet umfassende NestJS-Best-Practices, darunter modulare Architektur, Dependency-Injection-Scoping, Exception-Filter, DTO-Validierung mit class-validator und Drizzle-ORM-Integration. Verwenden Sie dies beim Entwerfen von NestJS-Modulen, Implementieren von Providern, Erstellen von Exception-Filtern, Validieren von DTOs oder Integrieren von Drizzle ORM in NestJS-Anwendungen.
Übersicht
Diese Fähigkeit bietet einen detaillierten Überblick über die Best Practices für die Entwicklung von NestJS-Anwendungen, einschließlich:
- Modulare Architektur: Verwendung des Modulsystems von NestJS zur Organisation der Anwendung in kohärente Funktionsblöcke.
- Dependency Injection Scoping: Richtige Verwendung von Scopes für Provider (Singleton, Request, Transient).
- Exception-Filter: Erstellung globaler oder dekorationsbezogener Exception-Filter für eine konsistente Fehlerbehandlung.
- DTO-Validierung mit class-validator: Verwendung von Dekorateuren und Validierungspipes zur Sicherstellung der Datenintegrität.
- Drizzle ORM Integration: Konfiguration und Verwendung von Drizzle ORM für die Datenbankinteraktion innerhalb von NestJS.
Verwendung
Befolgen Sie diese Richtlinien, um die Fähigkeiten in Ihrem Projekt zu nutzen:
- Module definieren: Erstellen Sie Module, die zusammengehörige Funktionen kapseln und Abhängigkeiten bereitstellen.
- Provider konfigurieren: Verwenden Sie das Dependency-Injection-System, um Services, Repositories und andere Provider zu definieren.
- DTOs validieren: Definieren Sie DTOs mit
class-validator-Dekorateuren und wenden Sie dieValidationPipean. - Fehler behandeln: Implementieren Sie Exception-Filter, um Fehler konsistent zu formatieren und zu loggen.
- Drizzle ORM integrieren: Konfigurieren Sie Drizzle ORM und nutzen Sie dessen Funktionen für Datenbankoperationen.
Beispiele
Beispiel 1: Modulare Architektur
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService],
exports: [UserService]
})
export class UserModule {}
Beispiel 2: DTO-Validierung
import { IsString, IsEmail, MinLength } from 'class-validator';
export class CreateUserDto {
@IsString()
@MinLength(3)
username: string;
@IsEmail()
email: string;
@IsString()
@MinLength(8)
password: string;
}
Beispiel 3: Exception-Filter
import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
import { Response } from 'express';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const status = exception.getStatus();
response
.status(status)
.json({
statusCode: status,
timestamp: new Date().toISOString(),
path: ctx.getRequest().url,
});
}
}
Beispiel 4: Drizzle ORM Integration
import { Injectable } from '@nestjs/common';
import { InjectDrizzle } from './drizzle.provider';
import * as schema from './schema';
@Injectable()
export class UserService {
constructor(@InjectDrizzle() private readonly db: ReturnType<typeof drizzle>) {}
async create(data: CreateUserDto): Promise<User> {
const result = await this.db.insert(schema.users).values(data).returning();
return result[0];
}
}
Quellen
Weitere Informationen finden Sie in der offiziellen Dokumentation: