Fix multer types and configuration
This commit is contained in:
@@ -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
|
// Routes
|
||||||
app.get('/api/events', async (req: Request, res: Response) => {
|
app.get('/api/events', async (req: Request, res: Response) => {
|
||||||
try {
|
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 {
|
try {
|
||||||
const { title, description, date, location, needed_items } = req.body;
|
const { title, description, date, location, needed_items } = req.body;
|
||||||
const wallpaperPath = req.file ? `/uploads/wallpapers/${req.file.filename}` : null;
|
const wallpaperPath = req.file ? `/uploads/wallpapers/${req.file.filename}` : null;
|
||||||
|
|||||||
@@ -7,8 +7,12 @@
|
|||||||
"strict": true,
|
"strict": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"forceConsistentCasingInFileNames": true
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"typeRoots": ["./node_modules/@types"],
|
||||||
|
"types": ["node", "express", "multer"]
|
||||||
},
|
},
|
||||||
"include": ["src/**/*"],
|
"include": ["src/**/*"],
|
||||||
"exclude": ["node_modules"]
|
"exclude": ["node_modules", "dist"]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user