首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SWIFT5.2中的FluentPostgreSQL,POST和GET可以正常工作,但我不知道数据存储在哪里

使用SWIFT5.2中的FluentPostgreSQL,POST和GET可以正常工作,但我不知道数据存储在哪里
EN

Stack Overflow用户
提问于 2020-05-21 05:31:45
回答 5查看 175关注 0票数 0

1)我在Package.swift中有以下内容:

代码语言:javascript
复制
    .package(url: 

"https://github.com/vapor/postgresql.git", from: "1.0.0")
 targets: [
        .target(name: "App", dependencies: ["FluentSQLite", "Vapor", "PostgreSQL"]),
... etc.

2)并且我在configure.swift中配置了PostgreSQL:

代码语言:javascript
复制
let postgreSQLConfig = PostgreSQLDatabaseConfig(
  hostname: "localhost",
  port: 5432,
  username: "postgres",
  database: "mydb2",
  password: "bigsecret"
)
let psql = PostgreSQLDatabase(config: postgreSQLConfig)
var databases = DatabasesConfig()
databases.add(database: psql, as: .psql)
services.register(databases)

3)并且我在PostgreSQL 11.3中有一个名为文章的表。4)我在Article.swift中有以下内容:

代码语言:javascript
复制
    import Foundation
    import FluentPostgreSQL  
    import Vapor

    struct Article: PostgreSQLModel {
        var id: Int?

        var title: String
        var content: String
        init(id: Int? = nil, title: String, content: String) {
          self.title = title
          self.content = content
        }

    }

extension Article: Content {}
extension Article: Migration {}

5) routes.swift看起来像:

代码语言:javascript
复制
let articleController = ArticleController()
router.get("articles", use: articleController.index)
router.post("articles", use: articleController.create)

6) POST和GET都正常工作(即GET返回我所有的POSTed),但我在PostgreSQL中看不到表,所以我不知道数据存储在哪里:

代码语言:javascript
复制
import Vapor
import Foundation
    final class ArticleController {
        func index(_ req: Request) throws -> Future<[Article]> {
            return Article.query(on: req).all()
        }

        func create(_ req: Request) throws -> Future<Article> {
            return try req.content.decode(Article.self).flatMap { article in
                    print("10j")
                    return article.save(on: req)
            }
        }


    }

请求的Content-Type设置为application/json,请求正文如下:

代码语言:javascript
复制
{"id":1,"title":"GGG","content":"HHH"}
EN

回答 5

Stack Overflow用户

发布于 2020-05-21 05:54:29

您需要对有效载荷进行解码,然后将其保存到数据库中,然后转换为所需的结果

代码语言:javascript
复制
router.post(at: "article") { req -> EventLoopFuture<String> in
    let article = try req.content.decode(Article.self)
    return article.create(on: req).transform(to: "what happened?")
}

如果您还没有创建模型,您可以通过configure.swift中的迁移来创建模型(例如Vapor3)

代码语言:javascript
复制
var migrations = MigrationConfig()
migrations.add(model: Article.self, database: .psql)
services.register(migrations)

Artice模型文件应如下所示(Vapor3示例)

代码语言:javascript
复制
final class Article {
    var id: Int?
    var title: String
    var content: String

    init(id: Int? = nil, title: String, content: String) {
      self.title = title
      self.content = content
    }
}
extension Article: Content {}
extension Article: Migration {}
extension Article: Model {
    typealias Database = PostgreSQLDatabase
    typealias ID = Int
    static var idKey: IDKey { \.id }
}
票数 2
EN

Stack Overflow用户

发布于 2020-05-22 00:13:00

你不能就这样抛弃未来。这会导致许多问题:

  1. In Vapor 3,这将导致内存泄漏。
  2. 您忽略了保存的结果,所以它失败了,但您不知道这一点。
  3. 您在将来返回之前返回字符串-数据库中的保存。

因为一切都是异步的,所以您需要更改编写代码的方式。相反,你应该这样做:

代码语言:javascript
复制
router.post(Article.self, at: "article") { req, article -> String in
    return article.save(on: req).map { savedArticle in
        return("what happened?")
    }
}

至于保存失败的原因,您应该在控制台中看到打印出来的结果。

票数 1
EN

Stack Overflow用户

发布于 2020-05-22 23:56:04

谜团解开了。您需要引用表名,因为大写A: mydb4=# select * from“文章”;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61923283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档