Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hodfords-solutions/nestjs-exception
A NestJS module for handling and customizing exceptions with ease
https://github.com/hodfords-solutions/nestjs-exception
exception nestjs nodejs
Last synced: 6 days ago
JSON representation
A NestJS module for handling and customizing exceptions with ease
- Host: GitHub
- URL: https://github.com/hodfords-solutions/nestjs-exception
- Owner: hodfords-solutions
- Created: 2022-11-02T10:18:26.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-08T04:56:55.000Z (4 months ago)
- Last Synced: 2025-01-08T17:16:36.049Z (13 days ago)
- Topics: exception, nestjs, nodejs
- Language: TypeScript
- Homepage: https://opensource.hodfords.uk/nestjs-exception
- Size: 346 KB
- Stars: 40
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
This repository contains a set of custom exception filters and exceptions designed for use in a NestJS application. It enhances error handling for HTTP-based and microservice-based (gRPC, Kafka) applications by providing more meaningful error responses and localization support.## Installation 🤖
To begin using it, we first install the required dependencies.
```
npm install @hodfords/nestjs-exception
```## Exception Classes
> **Note**: These exception classes only function when used alongside the `HttpExceptionFilter` or one of its child classes (`GrpcExceptionFilter`, `KafkaExceptionFilter`, etc.). Be sure to apply the appropriate filter in your application.
**1\. UuidException**
This exception is used to handle invalid UUID formats in requests. It returns a 400 `BAD_REQUEST` status.
Parameters:
- `field`: The name of the field that contains the invalid UUID. This value is passed to indicate which field caused the exception.
**2\. ValidateException**
Handles specific validation errors related to a particular field. Returns a 422 `UNPROCESSABLE_ENTITY` status.
Parameters:
- `property`: The field name that caused the validation error.
- `message`: The detailed message for the validation error.
- `constraint`: The validation constraint that was violated (e.g., notNull).
- `detail`: Additional information for the validation error, if applicable.## Exception Filters
- **HttpExceptionFilter**: Handles various types of HTTP exceptions with localization support.
- **GrpcExceptionFilter**: Handles exceptions for gRPC microservices, formatting errors for gRPC clients.
- **KafkaExceptionFilter**: Manages exceptions in Kafka microservices, formatting errors for Kafka messaging.
- **ValidatorExceptionFilter**: Catches validation errors (`ValidateException`), supporting nested object validation and localization.
**Note on Translation**: These filters, especially `HttpExceptionFilter` and `ValidatorExceptionFilter`, rely on a translation service to provide localized error messages. Ensure that your application has translation support enabled (e.g., using `@hodfords/nestjs-cls-translation`). The filters use translation keys defined in your language files to dynamically translate error messages based on the request's language.
## Example of usage
To use the exception classes and filters in your NestJS application, follow these steps:
#### 1\. **Applying the `HttpExceptionFilter`**
**Global Application:**
```typescript
import { HttpExceptionFilter } from '@hodfords/nestjs-exception';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(3000);
}
bootstrap();
```**Controller-Level Application:**
```typescript
import { Controller, UseFilters } from '@nestjs/common';
import { HttpExceptionFilter } from 'hodfords/nestjs-exception';@Controller('users')
@UseFilters(HttpExceptionFilter)
export class UserController {}
```#### 2\. **Throwing a Custom Exception**
```typescript
import { UuidException } from '@hodfords/nestjs-exception';@Controller('users')
export class UserController {
@Get(':id')
getUser(@Param('id') id: string) {
if (!isValidUUID(id)) {
throw new UuidException('id'); // Translation key: 'error.field_malformed'
}
return { id };
}
}
```## License
This project is licensed under the MIT License