Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

Awesome Lists containing this project

README

        


Nest Logo


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