Ios 命中Node Express端点时,URLSession.shared.dataTask数据始终为空

Ios 命中Node Express端点时,URLSession.shared.dataTask数据始终为空,ios,node.js,swift,swift4,nsurlsession,Ios,Node.js,Swift,Swift4,Nsurlsession,我有一个简单的Node Express端点,我可以用curl成功命中它: curl --header "Content-Type: application/json" \ --request POST \ --data '{"lat":33.485834000000001,"long":-100.106417}' \ http://192.168.99.100:49160/login {"status":200,"data":{"userId":"bff37d9c-25a9-421b

我有一个简单的Node Express端点,我可以用curl成功命中它:

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"lat":33.485834000000001,"long":-100.106417}' \
  http://192.168.99.100:49160/login
{"status":200,"data":{"userId":"bff37d9c-25a9-421b-aa58-eba0fef0da03"},"message":null}
但是,当我尝试击中相同的端点,但使用Swift 4时:

let task = URLSession.shared.dataTask(with: urlRequest) { data, response, error in
            guard let serverData = data, error == nil else {
                handler(ResponseBuilder().set(error: ErrorType.network).build())

                return
            }

           // Process data.
        }
        task.resume()
URLSession返回给我的“数据”中没有任何内容。我希望数据包含与上面curl返回的值相同的值

“响应”按我的预期填充:

Optional<NSURLResponse>
  - some : <NSHTTPURLResponse: 0x600000a1a5a0> { URL: http://192.168.99.100:49160/login } { Status Code: 200, Headers {
    Connection =     (
        "keep-alive"
    );
    "Content-Length" =     (
        86
    );
    "Content-Type" =     (
        "application/json; charset=utf-8"
    );
    Date =     (
        "Thu, 25 Oct 2018 05:51:39 GMT"
    );
    Etag =     (
        "W/\"56-8ZCdAcNDopMfakzfNDEniZ0fgoc\""
    );
    "X-Powered-By" =     (
        Express
    );
} }
其中“request”只是我使用的一个包装器对象,它的内容是:

Request
  ▿ url : http://192.168.99.100:49160/login
    - _url : http://192.168.99.100:49160/login
  ▿ data : 2 elements
    ▿ 0 : 2 elements
      - key : "lat"
      - value : 33.485834000000001
    ▿ 1 : 2 elements
      - key : "long"
      - value : -100.106417
更新3

根据某人的建议,我安装了Charles Proxy。结果如下:

请求:

{
  "lat" : 33.485834000000001,
  "long" : -100.106417
}
答复:

{"status":200,"data":{"userId":"3d559555-c0ad-4e3a-a10b-3e267ee7f662"},"message":null}

不幸的是,在这种情况下,在URLSession上下文中的完成处理程序中,xcode调试器可能不可靠—它总是将数据显示为具有0字节

使用以下任一方法打印数据:

let received = String(data: data!, encoding: String.Encoding.utf8)
print("\(received)")


尽量不要因为用力摇头而扭伤脖子……

这是什么要求?你是怎么定的?您是否将所有参数都设置为cURL?您如何检查URLSession返回给我的“数据”中是否没有任何内容?我使用调试器检查“数据”中是否没有任何内容。我第一次注意到这个问题是因为在我的处理过程中,我有一个调用:if let dataDictionary=NSKeyedUnarchiver.unarchiveObjectwith:serverData as?[String:Any]{handlerResponseBuilder.setdata:dataDictionary.build}。此处理程序没有被触发,这导致我开始检查数据是否存在。我使用调试器检查“数据”中是否没有任何内容。解释不了多少。你在什么地方设置断点了吗?调试器到底显示了什么?请提供足够的信息来解决您的问题。我在“guard let serverData=data,error==nil else{”行上设置了一个断点。然后我将鼠标悬停在数据变量上,它表示0字节。
let received = String(data: data!, encoding: String.Encoding.utf8)
print("\(received)")
let resultObject = try JSONSerialization.jsonObject(with: data!, options: [.allowFragments,])
print("\(resultObject)")