开发过程中发现ajax提交的数据无法被express正确的解析,主要的情况是这样的:
// 浏览器端post一个对象
$.ajax({
url:"/save",
type:"post",
data:{
name:"henry",
age:30,
hobby:["sport","coding"]
}
});
// express接收这个对象
router.post("/save",function(req, res, next){
console.log(req.body);// => { 'info[name]': 'henry','info[age]': '30','hobby[1]': 'sport','hobby[2]': 'coding' }
});
解决方式:
使用bodyParser中间件
bodyParser中间件用来解析http请求体,是express默认使用的中间件之一。
使用express应用生成器生成一个网站,它默认已经使用了 bodyParser.json
与 bodyParser.urlencoded
的解析功能,除了这两个,bodyParser还支持对text、raw的解析。
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
顾名思义,bodyParser.json是用来解析json数据格式的。bodyParser.urlencoded则是用来解析我们通常的form表单提交的数据,也就是请求头中包含这样的信息: