如何从 iOS 应用程序中的 Node.js 服务器获取响应?
Posted
技术标签:
【中文标题】如何从 iOS 应用程序中的 Node.js 服务器获取响应?【英文标题】:How do i get the response from Node.js server in iOS app? 【发布时间】:2017-10-21 20:21:29 【问题描述】:当用户登录时,我有一个发送 JWT(JSON Web Token) 作为响应的 Node.js 服务器。如何在我的 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
【问题讨论】:
打印捕获的错误而不是空捕获;也许你的解码失败了。 它在打印什么sentPost
?
您可以发布loginUser
示例吗?您可以发布您对数据的期望的示例数据吗?
你能发布你期望的数据样本格式吗?
它不存在。你说你期待令牌。
【参考方案1】:
根据帖子,我猜您的回复将采用以下格式:
"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()
【讨论】:
这种方式不会从服务器获取任何东西,只会发送。不过还是谢谢你的结构。 你问对了另一个问题,因为这很有用【参考方案2】: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()
【讨论】:
你复制了我的答案,然后你接受了你的答案。以上是关于如何从 iOS 应用程序中的 Node.js 服务器获取响应?的主要内容,如果未能解决你的问题,请参考以下文章
如何将二进制数据从 Node.js socket.io 服务器发送到浏览器客户端?
为啥我的 Auth0 令牌从 iOS 发送到 node.js 服务器时总是返回无效?
从 C# 程序连接基于 node.js 的 socket.io WebSocket 服务器