1.0.3 • Published 2 months ago

@buildery/nest-exception-handling v1.0.3

Weekly downloads
-
License
UNLICENSED
Repository
github
Last release
2 months ago

Description

Nestjs Exception handling implementation. Includes: Handler's chain mechanism Custom exception to inherit from * Implemented Nest JS Validation Exception handler

Exception structure:

    {
        code: "ERROR:<ENTITY>-<CODE_MESSAGE>"
        status: 500,
        title: "Error!",
        message: 'This was screwed',
        body: { any info you like }
    }

Nest framework TypeScript starter repository.

Use

installation

$ npm install @asemin/nestjs-utils

Handler creation example

Class must extend ExceptionHandler and implement handle method. Method must return HandlerExceptionDto filled.

export class MongoExceptionHandler extends ExceptionHandler{
    handle(exception: any): HandledExceptionDto {
        if ( !(exception instanceof MongoError) )
            return this.next?.handle(exception);

        switch (exception.code) {
            case 11000:
                return new HandledExceptionDto(getException(CODES.DATABASE.DUPLICATE));
        }

        return null;
    }
}

handlers chain creation

Each member must extend ExceptionHandler

export const handlersChain = [
    new MongoExceptionHandler(),
    new ValidationExceptionHandler(),
    new CustomExceptionHandler(),
    new HttpExceptionHandler()
];

Nestjs exception filter configuration. main.ts:

    const exceptionFilter = new ExceptionFilter(
        <ExceptionHandler>createExceptionHandlersChain(handlersChain)
    );

    app.useGlobalFilters(exceptionFilter);

Custom exception use

throwException

Use one of the codes. Fill free to put any information to body (second param) If there are no code suitable - throw any exception type manually.

throwException(CODES.COMMON.EMPTY_PARAM, {method: 'getByPermissionAndPermissionSets', fields: {permissionId, permissionSetIds}})

getException info

const {code, status, message} = getException(CODES.COMMON.UNKNOWN);