在使用node的过程当中,express框架是必不可少的。以前表单提交数据使用的是submit按钮,使用express的中间件body-parser来处理,在req.body中能够拿到表单传来的值。前端
可是今天在使用ajax发送数据时,使用了XMLHttpRequest 2.0 提供的FormData来提交表单数据,出现了req.body一直是个空对象的状况,具体代码以下:node
前端JS代码:ajax
$('.addBtn').click(function() { let fd = new FormData($('.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 能够解决问题(白眼)express
processData: false
这一项也是,不须要jQuery帮咱们作数据处理,不然也会致使后端拿不到数据npm
后端代码:后端
router.post('/add', (req, res) => { console.log(req.body); //{} });
后来经过查阅资料才知道 body-parser 并不支持 contentType: multipart/form-data 的格式类型,也就是不支持formData格式app
具体步骤以下:框架
安装post
npm i connect-multiparty -S
引用ui
const multipart = require('connect-multiparty'); const multipartyMiddleware = multipart();
使用
router.post('/add', multipartyMiddleware, (req, res) => { console.log(req.body); //{ name: '白雪公主', husband: '王子', age: '20', gender: '女' } });
相似的第三方模块还有 multiparty,想要了解的话,能够去查阅一下相关的资料,在这里就再也不赘述了。