diff --git a/apps/nutriphi/apps/backend/src/main.ts b/apps/nutriphi/apps/backend/src/main.ts index 16553afd8..9834f09cd 100644 --- a/apps/nutriphi/apps/backend/src/main.ts +++ b/apps/nutriphi/apps/backend/src/main.ts @@ -6,4 +6,5 @@ bootstrapApp(AppModule, { serviceName: 'NutriPhi', additionalCorsOrigins: ['http://localhost:5180', 'http://localhost:4323'], excludeFromPrefix: [], // no exclusions + bodyLimit: '50mb', // Large limit for Base64 image uploads }); diff --git a/packages/shared-nestjs-setup/package.json b/packages/shared-nestjs-setup/package.json index 0941bb579..faae82cc8 100644 --- a/packages/shared-nestjs-setup/package.json +++ b/packages/shared-nestjs-setup/package.json @@ -13,10 +13,12 @@ }, "dependencies": { "@nestjs/common": "^10.0.0 || ^11.0.0", - "@nestjs/core": "^10.0.0 || ^11.0.0" + "@nestjs/core": "^10.0.0 || ^11.0.0", + "express": "^4.21.0" }, "devDependencies": { "@manacore/shared-tsconfig": "workspace:*", + "@types/express": "^4.17.21", "@types/node": "^22.10.2", "typescript": "^5.0.0" }, diff --git a/packages/shared-nestjs-setup/src/index.ts b/packages/shared-nestjs-setup/src/index.ts index 922329404..b346181fb 100644 --- a/packages/shared-nestjs-setup/src/index.ts +++ b/packages/shared-nestjs-setup/src/index.ts @@ -5,8 +5,9 @@ * across all backend applications. */ -import { INestApplication, ValidationPipe, Type } from '@nestjs/common'; +import { type INestApplication, ValidationPipe, type Type } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; +import { json, urlencoded } from 'express'; /** * Default CORS origins for local development @@ -36,6 +37,8 @@ export interface BootstrapOptions { excludeFromPrefix?: string[]; /** HTTP methods for CORS (default: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']) */ corsMethods?: string[]; + /** Body size limit for JSON/urlencoded payloads (default: '100kb'). Use '50mb' for image uploads. */ + bodyLimit?: string; } /** @@ -111,6 +114,11 @@ export async function bootstrapApp( ): Promise { const app = await NestFactory.create(AppModule); + // Configure body size limit (important for services handling image uploads) + const bodyLimit = options.bodyLimit ?? '100kb'; + app.use(json({ limit: bodyLimit })); + app.use(urlencoded({ extended: true, limit: bodyLimit })); + // Configure CORS configureCors(app, { additionalOrigins: options.additionalCorsOrigins,