我正在尝试使用Vapor3执行 raw SQL查询。不幸的是,所提供的有关此类内容的文档在网站上非常模糊。
基本上我想做类似的事情:
router.get("example") { req -> Future<View> in
let leaf = try request.make(LeafRenderer.self)
// I can't get this next bit to work. Does anyone have any ideas how to do this? I seem to get all sorts of Xcode errors with .mysql, closures etc.
let users = try request.withNewConnection(to: .mysql) { connection -> EventLoopFuture<[User]>
return try connection.raw("select * from users").all(decoding: User.self)
}
var context = [String: String]()
context["user"] = users
return leaf.render("example", context)
}
如果希望我在这里做错任何帮助,将不胜感激。
预先感谢, 马特
答案 0 :(得分:1)
您的代码失败,因为您没有正确实现闭包。您的路线以let users...
闭包形式返回,因此永远不会到达第二个return
。
这有效:
router.get("example")
{
insecure.get("example") {
request -> Future<View> in
return request.withNewConnection(to: .mysql) {
connection in
return connection.raw("select * from User").all(decoding: User.self).flatMap(to:View.self) {
users in
return try request.make(LeafRenderer.self).render("example",["users":users])
}
}
}
}
更改为:
leaf
。users
的定义现在位于闭包之内。