| name | NestJS Error Handling |
|---|---|
| description | Global Exception Filters and standard error formats. |
| metadata | {"labels": ["nestjs", "errors", "filters"], "triggers": {"files": ["**/*.filter.ts", "main.ts"], "keywords": ["ExceptionFilter", "Catch", "HttpException"]}} |
NestJS Error Handling Standards
Priority: P1 (OPERATIONAL)
Global error handling and exception management patterns.
- Requirement: Centralize error formatting.
- Platform Agnostic: Do not import
Request/Responsefrom Express/Fastify types directly. - Use:
HttpAdapterHostto access the underlying platform response methods. const { httpAdapter } = this.httpAdapterHost;- Structure:
- Implement strictly typed error responses.
- Refer to API Standards for
ApiErrorResponse.
json
{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request",
"timestamp": "ISO...",
"path": "/users"
}
Error Flow
- Service: Throws specific or generic errors (e.g.,
EntityNotFoundError). - Interceptor: Maps low-level errors to HTTP Exceptions (e.g.,
catchError(err => throw new NotFoundException())). - Why: Keeps Exception Filters focused on formatting, not business logic interpretation. - Global Filter: Formats the final JSON response.
Built-in Exceptions
- Use: Throw
NotFoundException,ForbiddenException,BadRequestException. - Custom: Extend
HttpExceptiononly for domain-specific failures that need specific status codes.
Logging
- Context: Always pass
MyClass.nameto theLoggerconstructor. - Levels:
error: 500s (Stack trace required).warn: 400s (Client errors).
Security (Information Leakage)
- Production: NEVER expose stack traces in HTTP responses (
process.env.NODE_ENV === 'production'). - Sanitization: Ensure
ApiExceptionpayloads do not leak internal file paths or raw variable dumps.