Fix multer types and configuration

This commit is contained in:
2025-05-01 08:23:54 -04:00
parent f7480c1d93
commit 04f01dd56c
2 changed files with 43 additions and 3 deletions

View File

@@ -29,6 +29,42 @@ async function connectToDatabase() {
});
}
// Configure multer for file uploads
const uploadDir = path.join(__dirname, '../../uploads/wallpapers');
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir, { recursive: true });
}
// Define multer request interface
interface MulterRequest extends Request {
file?: Express.Multer.File;
}
const storage = multer.diskStorage({
destination: function (req: Request, file: Express.Multer.File, cb: (error: Error | null, destination: string) => void) {
cb(null, uploadDir);
},
filename: function (req: Request, file: Express.Multer.File, cb: (error: Error | null, filename: string) => void) {
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
cb(null, uniqueSuffix + path.extname(file.originalname));
}
});
const upload = multer({
storage: storage,
limits: {
fileSize: 5 * 1024 * 1024 // 5MB limit
},
fileFilter: (req: Request, file: Express.Multer.File, cb: multer.FileFilterCallback) => {
const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (allowedTypes.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error('Invalid file type. Only JPEG, PNG and GIF are allowed.'));
}
}
});
// Routes
app.get('/api/events', async (req: Request, res: Response) => {
try {
@@ -64,7 +100,7 @@ app.get('/api/events/:slug', async (req: Request, res: Response) => {
}
});
app.post('/api/events', multer().single('wallpaper'), async (req: Request, res: Response) => {
app.post('/api/events', upload.single('wallpaper'), async (req: MulterRequest, res: Response) => {
try {
const { title, description, date, location, needed_items } = req.body;
const wallpaperPath = req.file ? `/uploads/wallpapers/${req.file.filename}` : null;

View File

@@ -7,8 +7,12 @@
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"typeRoots": ["./node_modules/@types"],
"types": ["node", "express", "multer"]
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
"exclude": ["node_modules", "dist"]
}