Input-Text geht, CORS behoben
This commit is contained in:
		
							
								
								
									
										2
									
								
								backend/dist/routes/health.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								backend/dist/routes/health.js.map
									
									
									
									
										vendored
									
									
								
							| @@ -1 +1 @@ | ||||
| {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":";;AAAA,qCAAoD;AAEpD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAGxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC9C,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,+BAA+B;QACxC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;KAClC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAGH,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACtD,IAAI,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,gCAAgC;YACzC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,4BAA4B;YACrC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"} | ||||
| {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":";;AAAA,qCAAoD;AAEpD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAGxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC9C,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,yBAAyB;QAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;KAClC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAGH,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACtD,IAAI,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,gCAAgC;YACzC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,4BAA4B;YACrC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"} | ||||
							
								
								
									
										2
									
								
								backend/dist/routes/images.d.ts.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								backend/dist/routes/images.d.ts.map
									
									
									
									
										vendored
									
									
								
							| @@ -1 +1 @@ | ||||
| {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/routes/images.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAqQxB,eAAe,MAAM,CAAC"} | ||||
| {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/routes/images.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA0RxB,eAAe,MAAM,CAAC"} | ||||
							
								
								
									
										21
									
								
								backend/dist/routes/images.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								backend/dist/routes/images.js
									
									
									
									
										vendored
									
									
								
							| @@ -11,13 +11,21 @@ const fs_1 = __importDefault(require("fs")); | ||||
| const config_1 = require("../config/config"); | ||||
| const router = (0, express_1.Router)(); | ||||
| const prisma = new client_1.PrismaClient(); | ||||
| const getUploadsDir = (subPath) => { | ||||
|     const localUploadsDir = path_1.default.join(process.cwd(), 'uploads'); | ||||
|     const legacyUploadsDir = path_1.default.join(process.cwd(), '../../uploads'); | ||||
|     const baseDir = fs_1.default.existsSync(localUploadsDir) | ||||
|         ? localUploadsDir | ||||
|         : legacyUploadsDir; | ||||
|     return subPath ? path_1.default.join(baseDir, subPath) : baseDir; | ||||
| }; | ||||
| const storage = multer_1.default.diskStorage({ | ||||
|     destination: (req, file, cb) => { | ||||
|         const recipeNumber = req.body.recipeNumber || req.params.recipeNumber; | ||||
|         if (!recipeNumber) { | ||||
|             return cb(new Error('Recipe number is required'), ''); | ||||
|         } | ||||
|         const uploadDir = path_1.default.join(process.cwd(), '../../uploads', recipeNumber); | ||||
|         const uploadDir = getUploadsDir(recipeNumber); | ||||
|         if (!fs_1.default.existsSync(uploadDir)) { | ||||
|             fs_1.default.mkdirSync(uploadDir, { recursive: true }); | ||||
|         } | ||||
| @@ -28,7 +36,7 @@ const storage = multer_1.default.diskStorage({ | ||||
|         if (!recipeNumber) { | ||||
|             return cb(new Error('Recipe number is required'), ''); | ||||
|         } | ||||
|         const uploadDir = path_1.default.join(process.cwd(), '../../uploads', recipeNumber); | ||||
|         const uploadDir = getUploadsDir(recipeNumber); | ||||
|         const existingFiles = fs_1.default.existsSync(uploadDir) | ||||
|             ? fs_1.default.readdirSync(uploadDir).filter(f => f.match(new RegExp(`^${recipeNumber}_\\d+\\.jpg$`))) | ||||
|             : []; | ||||
| @@ -171,7 +179,7 @@ router.get('/serve/:imagePath(*)', (req, res, next) => { | ||||
|             }); | ||||
|         } | ||||
|         const cleanPath = imagePath.replace(/^uploads\//, ''); | ||||
|         const fullPath = path_1.default.join(process.cwd(), '../../uploads', cleanPath); | ||||
|         const fullPath = path_1.default.join(getUploadsDir(), cleanPath); | ||||
|         console.log(`Serving image: ${imagePath} -> ${fullPath}`); | ||||
|         if (!fs_1.default.existsSync(fullPath)) { | ||||
|             console.log(`Image not found: ${fullPath}`); | ||||
| @@ -182,8 +190,13 @@ router.get('/serve/:imagePath(*)', (req, res, next) => { | ||||
|                 resolvedPath: fullPath | ||||
|             }); | ||||
|         } | ||||
|         const allowedOrigins = ['http://localhost:5173', 'http://localhost:3000']; | ||||
|         const origin = req.headers.origin; | ||||
|         const corsOrigin = process.env.CORS_ORIGIN === '*' | ||||
|             ? (origin || '*') | ||||
|             : (origin && allowedOrigins.includes(origin)) ? origin : 'http://localhost:3000'; | ||||
|         res.set({ | ||||
|             'Access-Control-Allow-Origin': 'http://localhost:5173', | ||||
|             'Access-Control-Allow-Origin': corsOrigin, | ||||
|             'Access-Control-Allow-Credentials': 'true', | ||||
|             'Cache-Control': 'public, max-age=31536000', | ||||
|         }); | ||||
|   | ||||
							
								
								
									
										2
									
								
								backend/dist/routes/images.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								backend/dist/routes/images.js.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Reference in New Issue
	
	Block a user