当前正在构建一种将个人资料图片上传到我的网络应用的方法。
在用户的PUT路线上,我使用一条switch语句来检测后端需要执行的操作:
usersRouter.put( `/:id`, getUser, uploadProfilePicture, ( req, res ) => {
switch ( req.body.type ) {
<- other cases ->
case 'update profile picture':
...
break
}
} )
//middleware func
uploadProfilePicture = ( req, res, next ) => {
// this line doesnt work
if ( req.body == {} ) next()
const storage = multer.diskStorage( {
destination: './public/uploads',
filename: ( ( req, file, cb ) => {
cb( null, `user-${ req.body.user_id }-${ Date.now() }` + path.extname( file.originalname ) )
} )
} )
const upload = multer( {
storage,
limits: {
fileSize: 10000000
}
} ).single( 'image_data' )
upload( req, res, ( err ) => {
if ( err ) console.log( 'err uploading profile picture', err )
next()
} )
}
在uploadProfilePicture
中间件中,它使用Multer处理formData并将图像上传到我的服务器。
问题在于,碰到的PUT路线也可以处理其他情况。如果用户正在编辑用户名,则不应使用uploadProfilePicture
中间件功能。
我尝试通过检查req.body
是否为空对象来解决此问题,因为从req.body
内登录uploadProfilePicture
返回了{}
,但没有用。有没有一种方法可以检查我是否传递了formData,还是应该仅在我的API上创建一个仅用于上传个人资料图片的新端点。
谢谢!