在使用 koa2 的中间件 koa-bodyparser 解析客户端发来的 json 字符串时,发现解析异常,分析后发现,这锅 koa 不背,是发送 post 请求的问题。


【发送表单】

$.ajax({
    type: "post",
    url: '/dosomething',
    data: {'a':'A', 'b':1, 'c': true},
    success: function (data) {
        // TODO
    },
    error: function () {
        // TODO
    }
});

        此时,http 请求头里面

Content-Type: application/x-www-form-urlencoded

        http 请求的 body,

a=A&b=1&c=true

        这种情况下,服务端通常会把所有参数的值解析为字符串。


【发送 json 字符串】

$.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 请求头里面

Content-Type: application/json

        http 请求的 body,

{"a":"A","b":1,"c":true}

        这种情况下,服务端可以分别解析得到字符串、数字、布尔类型的参数。


*** walker ***