Conversation
Coverage Report
File Coverage
|
||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Pull request overview
Adds explicit handling for invalid JSON request bodies in the Fastify global error handler, aiming to return a consistent 400 response instead of delegating to generic error handling.
Changes:
- Import
StatusCodesfor standardized HTTP status constants. - Add a
SyntaxErrorhandling branch insetErrorHandlerthat logs and returns a 400 JSON response for invalid JSON bodies.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| /** | ||
| * JSON parse errors (invalid request body) | ||
| */ | ||
| if (error instanceof SyntaxError && error.message.includes('JSON')) { | ||
| this.log.warn({ reqId: request.id }, 'Invalid JSON in request body'); | ||
|
|
||
| return reply | ||
| .code(StatusCodes.BAD_REQUEST) | ||
| .type('application/json') | ||
| .send({ | ||
| message: 'Invalid JSON in request body', | ||
| error: 'Bad Request', | ||
| statusCode: StatusCodes.BAD_REQUEST, | ||
| }); |
There was a problem hiding this comment.
New behavior in the global error handler should be covered by tests. There is existing Vitest coverage for HTTP routes using global.api.fakeRequest (e.g., src/presentation/http/router/*.test.ts); please add a test that sends invalid JSON with content-type: application/json and asserts the API returns 400 with the expected error payload.
| /** | ||
| * JSON parse errors (invalid request body) | ||
| * Errors can be either SyntaxError or FastifyError. | ||
| */ | ||
| if ((error instanceof SyntaxError && error.message.includes('JSON')) | ||
| || ((error as FastifyError).code?.startsWith('FST_ERR_CTP_') ?? false)) { |
There was a problem hiding this comment.
is suppose that this type of errors aren't related to domain errors at all => this type of error handlers should be moved outside of the domainErrorHandler
Adds explicit handling for JSON parsing errors in the global error handler. When a request contains invalid JSON, the server now returns a consistent 400 Bad Request response instead of falling through to generic error handling.