错误:调用中缺少参数“from”的参数

问题描述

我正在尝试发出 http get 请求,我想返回将在 JSON 中获得的数据转换为 Array 并将其作为参数发送到 leaf 模板从 routes.swift 文件中,所有这些都使用 Vapor 框架,但我收到以下错误

Error: missing argument for parameter 'from' in call
let json = JSONDecoder().decode(Todos.self).

这是我的代码

app.get("datos") {req -> EventLoopFuture<View> in
    let url = URL(string: "https://jsonplaceholder.typicode.com/posts")
    guard let requestUrl = url else { fatalError("Error url") }
    var request = URLRequest(url: requestUrl)
    request.httpMethod = "GET"
    let task = URLSession.shared.dataTask(with: request) { (data,response,error) in
        if let error = error {
            print("Error took place \(error.localizedDescription)") 
            return
        }
        if let response = response as? HTTPURLResponse {
            print("Response HTTP Status code: \(response.statusCode)")
        }
        if let data = data,let dataString = String(data: data,encoding: .utf8) {
            print("Response data string:\n \(dataString)")
        }
    }
    task.resume()
    let json = JSONDecoder().decode(Todos.self)
    return req.view.render("objetos",json)
}
struct Todos: Codable{
 var  userId: Int
 var  id: Int
 var  title: String
 var  body: String

}

解决方法

不要使用 URLSession - 它不能很好地与 Vapor 的期货集成,而且建立在 AsyncHTTPClient 之上的 Vapor 客户端的性能和集成度要高得多。然后,您可以将代码重写为:

app.get("datos") { req -> EventLoopFuture<View> in
    req.client.get("https://jsonplaceholder.typicode.com/posts").flatMap { response in
        let todos = try response.content.decode(Todos.self)
        return req.view.render("objetos",json)
    }    
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...