Swift Vapor3 Raw SQL 使用新连接查询
Swift Vapor3 Raw SQL query with new connection
我正在尝试使用 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)
}
如果我在这里做错了,希望能提供任何帮助,我们将不胜感激。
提前致谢,
马特
您的代码失败是因为您没有正确实现闭包。您的路线 returns 在 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
的定义现在在闭包内。
我正在尝试使用 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)
}
如果我在这里做错了,希望能提供任何帮助,我们将不胜感激。
提前致谢, 马特
您的代码失败是因为您没有正确实现闭包。您的路线 returns 在 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
的定义现在在闭包内。