如果req.body有formData,如何跳过中间软件功能?

时间:2019-05-15 15:48:10

标签: javascript node.js express multer

当前正在构建一种将个人资料图片上传到我的网络应用的方法。

在用户的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上创建一个仅用于上传个人资料图片的新端点。

谢谢!

0 个答案:

没有答案