在使用 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