簡體   English   中英

命中Node Express端點時URLSession.shared.dataTask數據始終為空

[英]URLSession.shared.dataTask Data is Always Empty When Hitting Node Express Endpoint

我有一個簡單的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
    );
} }

“錯誤”為零,我在服務器上看到登錄消息,表明它已被命中,但數據仍然為空。

我正在使用模擬器運行iOS應用。

我在這里錯過明顯的東西嗎?

更新1

要回答以下一些問題。 “ urlRequest”的創建如下:

var urlRequest = URLRequest(url: request.url)
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
urlRequest.httpMethod = "POST"
urlRequest.httpBody = try? JSONSerialization.data(withJSONObject: request.data, options: .prettyPrinted)

其中“請求”只是我使用的包裝對象,其內容是:

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}

不幸的答案是,在這種情況下,xcode調試器可能不可靠(URLSession上下文中的完成處理程序)-它始終將數據顯示為0字節。

使用以下任一方法打印數據:

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

要么

let resultObject = try JSONSerialization.jsonObject(with: data!, options: [.allowFragments,])
print("\(resultObject)")

盡量不要過分搖頭以拉緊脖子...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM