mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-15 18:27:05 +00:00
Refactor HttpExceptionFilter to unify the error response
This commit is contained in:
@ -5,34 +5,55 @@ import {
|
|||||||
HttpException,
|
HttpException,
|
||||||
HttpStatus,
|
HttpStatus,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
|
|
||||||
@Catch()
|
@Catch()
|
||||||
export class HttpExceptionFilter implements ExceptionFilter {
|
export class HttpExceptionFilter implements ExceptionFilter {
|
||||||
catch(exception: unknown, host: ArgumentsHost) {
|
catch(exception: unknown, host: ArgumentsHost): void {
|
||||||
const ctx = host.switchToHttp();
|
const ctx = host.switchToHttp();
|
||||||
const response = ctx.getResponse<Response>();
|
const response = ctx.getResponse<Response>();
|
||||||
const request = ctx.getRequest<Request>();
|
const request = ctx.getRequest<Request>();
|
||||||
const status =
|
|
||||||
exception instanceof HttpException
|
|
||||||
? exception.getStatus()
|
|
||||||
: HttpStatus.INTERNAL_SERVER_ERROR;
|
|
||||||
|
|
||||||
const message =
|
const status = this.getStatus(exception);
|
||||||
exception instanceof HttpException
|
const errorMessage = this.getErrorMessage(exception);
|
||||||
? exception.getResponse()
|
const formattedStatus = this.formatStatus(status);
|
||||||
: 'Internal server error';
|
|
||||||
|
|
||||||
const errorResponse = {
|
const errorResponse = {
|
||||||
statusCode: status,
|
statusCode: status,
|
||||||
timestamp: new Date().toISOString(),
|
timestamp: new Date().toISOString(),
|
||||||
path: request.url,
|
path: request.url,
|
||||||
error: message,
|
error:
|
||||||
|
typeof errorMessage === 'string'
|
||||||
|
? {
|
||||||
|
message: errorMessage,
|
||||||
|
error: formattedStatus,
|
||||||
|
statusCode: status,
|
||||||
|
}
|
||||||
|
: errorMessage,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Optionally log the exception
|
console.error('Error occurred:', exception);
|
||||||
console.error(`Error occurred:`, exception);
|
|
||||||
|
|
||||||
response.status(status).json(errorResponse);
|
response.status(status).json(errorResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getStatus(exception: unknown): HttpStatus {
|
||||||
|
return exception instanceof HttpException
|
||||||
|
? exception.getStatus()
|
||||||
|
: HttpStatus.INTERNAL_SERVER_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
private getErrorMessage(exception: unknown): string | object {
|
||||||
|
return exception instanceof HttpException
|
||||||
|
? exception.getResponse()
|
||||||
|
: 'Internal server error';
|
||||||
|
}
|
||||||
|
|
||||||
|
private formatStatus(status: HttpStatus): string {
|
||||||
|
return HttpStatus[status]
|
||||||
|
.toLowerCase()
|
||||||
|
.replace('_', ' ')
|
||||||
|
.split(' ')
|
||||||
|
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
||||||
|
.join(' ');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user