error: missing argument for parameter 'from' in call

error: missing argument for parameter 'from' in call

我正在尝试发出 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 的未来集成,而 Vapor 的客户端构建在 AsyncHTTPClient 之上,性能和集成度更高。然后您可以重写您的代码,如下所示:

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)
    }    
}