Express 上传文件获取 req.body 为空对象

目录

  • Express 上传文件获取 req.body为空对象
    • 问题描述
    • 问题解决
    • 相关示例

Express 上传文件获取 req.body为空对象

问题描述

环境:Node
框架:express
场景:上传文件
请求:Headers 中 Content-Type 为 multipart/form-data 类型
问题:获取 req.body 为空对象

问题解决

添加中间件,例如:multer (npm包使用) 等
中间件正确方式挂在后可正常通过 req.body 方式接收

相关示例

router 文件: uploadFile 方法挂载

const express = require('express')
const router = express.Router()
const { add, list, remove, updata } = require('../controllers/positions')
const { uploadFile } = require('../middleware/upload')

router.post('/add', uploadFile, add)
router.post('/updata', uploadFile, updata)
router.get('/list', list)
router.delete('/remove', remove)

module.exports = router

middleware 文件: uploadFile 方法定义

const path = require('path')
const mime = require('mime')
const multer = require('multer')

// 存储到本地磁盘
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, path.join(__dirname, '../public/uploads'))
  },
  filename: function (req, file, cb) {
    const fileName = `${file.fieldname}-${Date.now()}.${mime.getExtension(file.mimetype)}`
    cb(null, fileName)
  }
})

// 限制大小
const limits = {
  fileSize: 1024 * 200
  // fields: 1
}

// 文件类型过滤
function fileFilter(req, file, cb) {
  const whitelist = ['image/png', 'image/jpg', 'image/jpeg', 'image/webp', 'image/gif']

  if (whitelist.includes(file.mimetype)) {
    // 接受这个文件,使用`true`,像这样:
    cb(null, true)
  } else {
    // 拒绝这个文件,使用`false`,像这样:
    // cb(null, false)
    // // 如果有问题,你可以总是这样发送一个错误:
    cb(new Error('图片格式仅支持:jpg/jpeg/png/gif/webp'))
  }
}

const upload = multer({
  storage,
  limits,
  fileFilter
}).single('companyLogo')

exports.uploadFile = (req, res, next) => {
  upload(req, res, function (err) {
    if (err instanceof multer.MulterError) {
      // 发生错误
      let msg = err.message === 'File too large' ? '图片大小不得超出 200k.' : err.message
      res.render('fail', {
        data: JSON.stringify({ massage: msg })
      })
    } else if (err) {
      // 发生错误
      res.render('fail', {
        data: JSON.stringify({ massage: err.message })
      })
    } else {
      // 一切都好
      next()
    }
  })
}

你可能感兴趣的:(npm包,Node,npm,node.js,javascript)