swift - 使用Vapor框架建立数据库连接

标签 swift sqlite vapor

我正在尝试使用 Swift 构建 API,并且选择使用 Vapor。

我已经创建了一个 SQLite 数据库,并且能够使用数据库客户端连接到它。

现在我希望我的 Swift Vapor 项目也使用 FluentSQLite 包连接到它。

我已在项目的根文件夹中创建了数据库:

/Users/rutgerhuijsmans/Documents/runk-3.0

我的数据库名为runk-3.0-database

该文件夹如下所示:

enter image description here

我尝试使用以下配置连接到我的数据库:

import FluentSQLite
import Vapor

/// Called before your application initializes.
public func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws {
    /// Register providers first
    try services.register(FluentSQLiteProvider())

    /// Register routes to the router
    let router = EngineRouter.default()
    try routes(router)
    services.register(router, as: Router.self)

    /// Register middleware
    var middlewares = MiddlewareConfig() // Create _empty_ middleware config
    /// middlewares.use(FileMiddleware.self) // Serves files from `Public/` directory
    middlewares.use(ErrorMiddleware.self) // Catches errors and converts to HTTP response
    services.register(middlewares)

    let sqlite: SQLiteDatabase?
    do {
        sqlite = try SQLiteDatabase(storage: .file(path: "runk-3.0-database"))
        print("data base connected") // This gets printed

        /// Register the configured SQLite database to the database config.
        var databases = DatabasesConfig()
        databases.add(database: sqlite!, as: .sqlite)
        services.register(databases)

        /// Configure migrations
        var migrations = MigrationConfig()
        migrations.add(model: User.self, database: .sqlite)
        services.register(migrations)
    } catch {
        print("couldn't connect") // This doesn't get printed
    }
}

我做错了什么?

最佳答案

正如 IMike17 所解释的,您的代码只是在 Build/Products/Debug 或release 文件夹中创建新的数据库文件。您必须动态设置完整路径,如下所示:

do {
let directory = DirectoryConfig.detect()
let filePath = directory.workDir + "runk-3.0-database"
sqlite = try SQLiteDatabase(storage: .file(path: filePath)) 
......

关于swift - 使用Vapor框架建立数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52549270/

相关文章:

ios - 为什么我的 Swift 代码可以在 playground 中运行,但不能在 Xcode 项目中运行?

javascript - 将 JavaScript 与 WkWebView 一起使用 - UserMessageHandler 上出现错误

arrays - 如果属性值存在于另一个对象数组中,则快速过滤对象数组

mysql - 为每个客户选择购买相同商品的所有其他客户

swift - 如何在 Vapor 3 中进行第三方 api 调用?

Swift vapor 3 ViewRenderer 错误

ios - 快速 watch 连接意外退出

检查 CREATE TABLE 是否实际创建了表或者它是否已经存在?

python - 在一个线程中创建的对象只能在同一个线程中使用

macos - 将 Nginx 配置为 Vapor API 的代理