1- import { Request } from 'express' ;
1+ import { NextFunction , Request , Response , RequestHandler } from 'express' ;
22import fs from 'fs' ;
33import { StatusCodes } from 'http-status-codes' ;
44import multer , { FileFilterCallback } from 'multer' ;
55import path from 'path' ;
66import ApiError from '../../errors/ApiError' ;
77
8- const fileUploadHandler = ( ) => {
8+ const fileUploadHandler = ( ) : RequestHandler => {
99 //create upload folder
1010 const baseUploadDir = path . join ( process . cwd ( ) , 'uploads' ) ;
1111 if ( ! fs . existsSync ( baseUploadDir ) ) {
@@ -22,7 +22,7 @@ const fileUploadHandler = () => {
2222 //create filename
2323 const storage = multer . diskStorage ( {
2424 destination : ( req , file , cb ) => {
25- let uploadDir ;
25+ let uploadDir : string ;
2626 switch ( file . fieldname ) {
2727 case 'image' :
2828 uploadDir = path . join ( baseUploadDir , 'image' ) ;
@@ -60,11 +60,7 @@ const fileUploadHandler = () => {
6060 cb : FileFilterCallback
6161 ) => {
6262 if ( file . fieldname === 'image' ) {
63- if (
64- file . mimetype === 'image/jpeg' ||
65- file . mimetype === 'image/png' ||
66- file . mimetype === 'image/jpg'
67- ) {
63+ if ( [ 'image/jpeg' , 'image/png' , 'image/jpg' ] . includes ( file . mimetype ) ) {
6864 cb ( null , true ) ;
6965 } else {
7066 cb (
@@ -75,7 +71,7 @@ const fileUploadHandler = () => {
7571 ) ;
7672 }
7773 } else if ( file . fieldname === 'media' ) {
78- if ( file . mimetype === 'video/mp4' || file . mimetype === 'audio/mpeg' ) {
74+ if ( [ 'video/mp4' , 'audio/mpeg' ] . includes ( file . mimetype ) ) {
7975 cb ( null , true ) ;
8076 } else {
8177 cb (
@@ -104,7 +100,20 @@ const fileUploadHandler = () => {
104100 { name : 'media' , maxCount : 3 } ,
105101 { name : 'doc' , maxCount : 3 } ,
106102 ] ) ;
107- return upload ;
103+
104+ // wrap Multer upload in a proper Express RequestHandler
105+ return ( req : Request , res : Response , next : NextFunction ) => {
106+ upload ( req as any , res as any , err => {
107+ if ( err instanceof ApiError ) {
108+ return res . status ( err . statusCode ) . json ( { message : err . message } ) ;
109+ } else if ( err ) {
110+ return res
111+ . status ( StatusCodes . BAD_REQUEST )
112+ . json ( { message : 'File upload error' } ) ;
113+ }
114+ next ( ) ;
115+ } ) ;
116+ } ;
108117} ;
109118
110119export default fileUploadHandler ;
0 commit comments