我正在试验一个独立的脚本,它将使用 Vapor 和 Fluent 查询 Postgres 数据库。在普通的 Vapor API 应用程序中,这可以简单地通过以下方式完成:
router.get("products") { request in
return Product.query(on: request).all()
}
然而,在独立脚本中,由于没有“请求”,我陷入了用什么来替换“请求”或DatabaseConnectable
和。这就是我陷入困境的地方:
import Fluent
import FluentPostgreSQL
let databaseConfig = PostgreSQLDatabaseConfig(hostname: "localhost",
username: "test",
database: "test",
password: nil)
let database = PostgreSQLDatabase(config: databaseConfig)
let foo = Product.query(on: <??WhatDoIPutHere??>)
我尝试创建一个符合以下条件的对象DatabaseConnectable
,但无法弄清楚如何正确地使该对象符合要求。
您将需要创建一个事件循环组才能发出数据库请求。 SwiftNIO 的MultiThreadedEventLoopGroup
对此有好处:
let worker = MultiThreadedEventLoopGroup(numberOfThreads: 2)
您可以根据需要更改使用的线程数。
现在您可以使用该工作程序创建与数据库的连接:
let conn = try database.newConnection(on: worker)
该连接是未来的,因此您可以map
它并在您的查询中传递连接:
conn.flatMap { connection in
return Product.query(on: connection)...
}
确保在完成工作后关闭工作程序shutdownGracefully(queue:_:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)