当前位置: 首页 > 后端技术 > Node.js

Express的body-parser中间件处理FormData的POST表单数据,req.body收不到数据

时间:2023-04-03 16:30:06 Node.js

问题在使用node的过程中,express框架必不可少。之前是通过提交按钮提交表单中的数据,使用express的中间件body-parser来处理数据。在req.body中,可以获取到表单传递的值。但是今天在使用ajax发送数据时,使用了XMLHttpRequest2.0提供的FormData来提交表单数据,而req.body一直是一个空对象。具体代码如下:前端JS代码:$('.addBtn').click(function(){letfd=newFormData($('.form')[0])$.ajax({url:'/add',type:'POST',contentType:false,processData:false,data:fd,success:function(res){console.log(res)}})})contentType:false此项必须设置为false,否则jQuery会默认contentType为application/x-www-form-urlencoded,导致后台获取不到数据,因为FormData默认的数据类型是multipart/form-data。在网上查了这个问题的相关资料,有的文档甚至写到contentType的类型改成application/x-www-form-urlencoded就可以解决问题(白眼)processData:false也是一样的,我们不需要jQuery来帮我们做数据处理,否则后台拿不到数据。后端代码:router.post('/add',(req,res)=>{console.log(req.body)//{}})原因是body-parser不支持contentType的格式类型:multipart/form-data,即不支持formData的格式。解决connect-multiparty第三方模块的具体步骤如下:installnpmiconnect-multiparty-Sreferenceconstmultipart=require('connect-multiparty')constmultipartyMiddleware=multipart()使用router.post('/add',multipartyMiddleware,(req,res)=>{console.log(req.body)//{name:'SnowWhite',husband:'Prince',age:'20',gender:'女'}})还有类似的第三方模块和multiparty。想了解更多的可以查看相关资料,这里就不赘述了