最近在学习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 })); 标签:express,const,form,cb,req,upload,multipart,multer From: https://www.cnblogs.com/jzm2842688813/p/18347058