express如何解析multipart/form-data格式的数据

最近在学习express,遇到了multipart/form-data请求参数接收不到的问题,控制台打印为{}空对象

 问了下AI说是用express内置的方法app.use(express.urlencoded({ extended: true })); 或者下载body-parser使用app.use(bodyParser.urlencoded({ extended:true}));结果都不行,控制台还是打印空对象;

后来想到自己上传文件用的是multer插件,上传文件用的也是form-data格式,于是就开始尝试multer解决.

const multer = require('multer');

const upload = multer({})

//我想应用在全局
app.use(upload.none(),function (req, res, next) {
  console.log("表单打印",req.body)
  next();
});

 成功了!!!

但是我发现我其他地方又出问题了 ̄へ ̄,他影响到了我文件上传的代码,可能是因为我全局配置了uoload.none();导致我文件上传那块解析不到fileList这个参数直接报错404。

const multer = require('multer');

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'public/images') // 确保这个文件夹已经存在
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + "." + file.originalname.split(".").pop())
  }
})
const upload = multer({ storage: storage,limits:{fileSize:1024 * 100},fileFilter:(req,file,cb)=>{
  checkFileType(file,cb);
}})

router.post('/uploadMutiple', upload.array('fileList', 3), async(req, res) => {
  /**其他代码省略*/
});

 所以不能在全局配置,只能在单个请求中使用这个中间件

// 比如登录
router.post('/login', upload.none(),async function (req, res) {
    console.log(req.body);可以打印到form-data请求参数
})

不知道有没有大佬有更好的方法

 

app.use(express.urlencoded({ extended: true })); 

posted on 2024-08-07 16:17  久居我梦  阅读(359)  评论(0)    收藏  举报

导航