From 8b1e26277cb051d5253d3782ae02c15aefc5d1a0 Mon Sep 17 00:00:00 2001 From: mertmit Date: Mon, 8 Apr 2024 09:24:23 +0000 Subject: [PATCH] fix: handle body parser error and avoid logging --- packages/nocodb-sdk/src/lib/globals.ts | 1 + .../filters/global-exception/global-exception.filter.ts | 9 +++++++++ packages/nocodb/src/helpers/catchError.ts | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/packages/nocodb-sdk/src/lib/globals.ts b/packages/nocodb-sdk/src/lib/globals.ts index 37db920322..a7b2e65d62 100644 --- a/packages/nocodb-sdk/src/lib/globals.ts +++ b/packages/nocodb-sdk/src/lib/globals.ts @@ -144,6 +144,7 @@ export enum NcErrorType { INTERNAL_SERVER_ERROR = 'INTERNAL_SERVER_ERROR', DATABASE_ERROR = 'DATABASE_ERROR', UNKNOWN_ERROR = 'UNKNOWN_ERROR', + BAD_JSON = 'BAD_JSON', } type Roles = OrgUserRoles | ProjectRoles | WorkspaceUserRoles; diff --git a/packages/nocodb/src/filters/global-exception/global-exception.filter.ts b/packages/nocodb/src/filters/global-exception/global-exception.filter.ts index a045f06c7a..96df28b22b 100644 --- a/packages/nocodb/src/filters/global-exception/global-exception.filter.ts +++ b/packages/nocodb/src/filters/global-exception/global-exception.filter.ts @@ -28,6 +28,15 @@ export class GlobalExceptionFilter implements ExceptionFilter { const response = ctx.getResponse(); const request = ctx.getRequest(); + // catch body-parser error and replace with NcBaseErrorv2 + if ( + exception.name === 'BadRequestException' && + exception.status === 400 && + /^Unexpected token .*? in JSON/.test(exception.message) + ) { + exception = new NcBaseErrorv2(NcErrorType.BAD_JSON); + } + // skip unnecessary error logging if ( process.env.NC_ENABLE_ALL_API_ERROR_LOGGING === 'true' || diff --git a/packages/nocodb/src/helpers/catchError.ts b/packages/nocodb/src/helpers/catchError.ts index a682c416de..0d14fd0893 100644 --- a/packages/nocodb/src/helpers/catchError.ts +++ b/packages/nocodb/src/helpers/catchError.ts @@ -514,6 +514,10 @@ const errorHelpers: { message: (feature: string) => `${feature} is not implemented`, code: 501, }, + [NcErrorType.BAD_JSON]: { + message: 'Invalid JSON in request body', + code: 400, + }, }; function generateError(