1)我在Package.swift中有以下内容:
.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:
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中有以下内容:
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看起来像:
let articleController = ArticleController()
router.get("articles", use: articleController.index)
router.post("articles", use: articleController.create)6) POST和GET都正常工作(即GET返回我所有的POSTed),但我在PostgreSQL中看不到表,所以我不知道数据存储在哪里:
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,请求正文如下:
{"id":1,"title":"GGG","content":"HHH"}发布于 2020-05-21 05:54:29
您需要对有效载荷进行解码,然后将其保存到数据库中,然后转换为所需的结果
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)
var migrations = MigrationConfig()
migrations.add(model: Article.self, database: .psql)
services.register(migrations)Artice模型文件应如下所示(Vapor3示例)
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 }
}发布于 2020-05-22 00:13:00
你不能就这样抛弃未来。这会导致许多问题:
因为一切都是异步的,所以您需要更改编写代码的方式。相反,你应该这样做:
router.post(Article.self, at: "article") { req, article -> String in
return article.save(on: req).map { savedArticle in
return("what happened?")
}
}至于保存失败的原因,您应该在控制台中看到打印出来的结果。
发布于 2020-05-22 23:56:04
谜团解开了。您需要引用表名,因为大写A: mydb4=# select * from“文章”;
https://stackoverflow.com/questions/61923283
复制相似问题