上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。
这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。
注:数据库配置比较重要
先将本地的Docker启动起来,用Docker管理数据库
-
将项目自己创建的Todo相关的都删掉,使用自己创建的
-
创建自定义 Model (与数据库字段一一对应)
import Fluent
import Vapor
import Security
final class Song: Model, Content {
static let schema: String = "songs"
init() {
}
@ID(key: .id)
var id:UUID?
@Field(key: "title")
var title: String
init(id: UUID? = nil, title: String) {
self.id = id
self.title = title
}
}
- 在 Migrations中创建与数据库交互代码(映射)
import Fluent
struct CreateSongs: Migration {
// 创建数据库
func prepare(on database: FluentKit.Database) -> NIOCore.EventLoopFuture<Void> {
return database.schema("songs")
.id()
.field("title",.string,.required)
.create()
}
func revert(on database: FluentKit.Database) -> NIOCore.EventLoopFuture<Void> {
return database.schema("songs").delete()
}
}
- 需要在 configure 文件中进行配置
// 添加配置代码
app.migrations.add(CreateSongs())
try app.autoMigrate().wait()
- 在 routes 文件中进行路由配置
import Fluent
import Vapor
func routes(_ app: Application) throws {
app.get { req async in
"It works!"
}
// 注册路由
try app.register(collection: SongController())
}
- 在 Controllers中创建自己的代码
import Fluent
import Vapor
struct SongController: RouteCollection {
func boot(routes: Vapor.RoutesBuilder) throws {
let songs = routes.grouped("songs")
songs.get(use: index)
songs.post(use: create)
}
// GET Request /songs route
func index(req: Request) throws -> EventLoopFuture<[Song]> {
return Song.query(on: req.db).all()
}
// POST Request /songs create 增
func create(req: Request) throws -> EventLoopFuture<HTTPStatus> {
let song = try req.content.decode(Song.self)
return song.save(on: req.db).transform(to: .ok)
}
}
自此简单代码配置已经完成。
自此运行项目可能会出现报错现象,进入项目目录命令行工具中输入
docker-compose up db
docker创建了数据库需要启动(一种是手动启动、一种是使用命令启动)
如果顺利的话,项目就可以正常运行。
接下来使用 Postman进行调试
上图为添加歌曲名称
上图为获取歌曲列表
上图Docker中数据库运行状态
可以使用Azure Data studio 进行查看Docker中创建的数据库信息
到此一个简单的使用Swift Vapor 插入数据,查询数据完成。