src/filters/bad-request.filter.ts
ExceptionFilter
Properties |
|
Methods |
|
constructor(reflector: Reflector)
|
||||||
Defined in src/filters/bad-request.filter.ts:15
|
||||||
Parameters :
|
Public reflector |
Type : Reflector
|
Defined in src/filters/bad-request.filter.ts:16
|
Private _validationFilter | ||||||
_validationFilter(validationErrors: ValidationError[])
|
||||||
Defined in src/filters/bad-request.filter.ts:36
|
||||||
Parameters :
Returns :
void
|
catch | |||||||||
catch(exception: BadRequestException, host: ArgumentsHost)
|
|||||||||
Defined in src/filters/bad-request.filter.ts:18
|
|||||||||
Parameters :
Returns :
void
|
import {
ArgumentsHost,
BadRequestException,
Catch,
ExceptionFilter,
HttpStatus,
} from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { ValidationError } from 'class-validator';
import { Response } from 'express';
import { STATUS_CODES } from 'http';
import * as _ from 'lodash';
@Catch(BadRequestException)
export class HttpExceptionFilter implements ExceptionFilter {
constructor(public reflector: Reflector) {}
catch(exception: BadRequestException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
let statusCode = exception.getStatus();
const r = <any>exception.getResponse();
if (_.isArray(r.message) && r.message[0] instanceof ValidationError) {
statusCode = HttpStatus.UNPROCESSABLE_ENTITY;
const validationErrors = <ValidationError[]>r.message;
this._validationFilter(validationErrors);
}
r.statusCode = statusCode;
r.error = STATUS_CODES[statusCode];
response.status(statusCode).json(r);
}
private _validationFilter(validationErrors: ValidationError[]) {
for (const validationError of validationErrors) {
for (const [constraintKey, constraint] of Object.entries(
validationError.constraints,
)) {
if (!constraint) {
// convert error message to error.fields.{key} syntax for i18n translation
validationError.constraints[constraintKey] =
'error.fields.' + _.snakeCase(constraintKey);
}
}
if (!_.isEmpty(validationError.children)) {
this._validationFilter(validationError.children);
}
}
}
}