我如何得到在iOS应用程序中的Node.js服务器的响应?

我有一个Node.js服务器,当用户login时,发送JWT(JSON Web Token)作为响应。如何在我的Swift 4 iOS应用程序中获得响应?

func handleLogin() { guard let username = usernameTextField.text, let password = passwordTextField.text else { print("Invalid form") return } guard let url = URL(string: "http://localhost:3000/users/authenticate") else { return } var request = URLRequest(url: url) request.httpMethod = "POST" request.addValue("application/json", forHTTPHeaderField: "Content-Type") let authUser = Login(username: username, password: password) do { let jsonBody = try JSONEncoder().encode(authUser) request.httpBody = jsonBody } catch {} let session = URLSession.shared let task = session.dataTask(with: request) task.resume() } 

它将用户名和密码发送到服务器,但是我从这里得到响应该怎么办? 答复是JWT令牌,我如何以及在哪里存储?

这里是结构。

 struct Login: Encodable { let username: String let password: String } struct User: Decodable { let id: Int let username: String let email: String } struct Response: Decodable { let token: String let user: User } 

根据这篇文章,Iam猜测你的回应将采用以下格式:

 { "token": "JWT 2424234234234", "user": { "id": 1, "username": "user.username", "email": "user.email" } } 

对于上面的JSON,你必须解码如下:

 struct Response: Codable { let token: String let user: User } struct User: Codable { let id: Int let username: String let email: String } let session = URLSession.shared let task = session.dataTask(with: request) { (data, _, _) in guard let data = data else { return } do { let sentPost = try JSONDecoder().decode(Response.self, from: data) print(sentPost.token) print(sentPost.user.id) print(sentPost.user.username) print(sentPost.user.email) } catch {} } task.resume() 
 let session = URLSession.shared let task = session.dataTask(with: request) { (data, _, _) in guard let data = data else { return } do { let _ = try JSONDecoder().decode(Response.self, from: data) } catch { print(String(data: data, encoding: .utf8)!) } } task.resume()