在使用 koa2 的中间件 koa-bodyparser 解析客户端发来的 json 字符串时,发现解析异常,分析后发现,这锅 koa 不背,是发送 post 请求的问题。
ajax
【发送表单】json
$.ajax({ type: "post", url: '/dosomething', data: {'a':'A', 'b':1, 'c': true}, success: function (data) { // TODO }, error: function () { // TODO } });
此时,http 请求头里面
app
Content-Type: application/x-www-form-urlencoded
http 请求的 body,
koa
a=A&b=1&c=true
这种状况下,服务端一般会把全部参数的值解析为字符串。ide
【发送 json 字符串】post
$.ajax({ type: "post", url: '/dosomething', data: JSON.stringify({'a':'A', 'b':1, 'c': true}), contentType: 'application/json', // 这句很重要 success: function (data) { // TODO }, error: function () { // TODO } });
此时,http 请求头里面url
Content-Type: application/json
http 请求的 body,
spa
{"a":"A","b":1,"c":true}
这种状况下,服务端能够分别解析获得字符串、数字、布尔类型的参数。koa2
*** walker ***code