![](/img/trans.png)
[英]database does not exist - PostgreSQL in Server Side Swift using Vapor 3 and Fluent
[英]How to pass parameters in request while routing (Server Side Swift using Vapor)
我正在使用Swift中的Vapor框架編寫Web服務。
在我的應用中,我有用戶模型。 以下是我為所有用戶路由獲取請求的方式。
router.get("users") { request in
return User.query(on: request).all()
}
在本地運行服務器后,要獲取用戶,我可以發出類似localhost:8080/users
的請求
現在,我想向請求中添加參數,以使用戶超過給定年齡。 該請求看起來像localhost:8080/users?above_age=25
如何使用Vapor框架在請求中添加參數? 我嘗試了可用的文檔,但我不知道。
因為我現在開始使用Vapor進行Server Side Swift,所以使用Vapor 3對資源的任何引用也將對我可能遇到的其他問題有所幫助。 謝謝!
查詢字符串參數將在查詢容器中,因此可以按如下方式訪問它們。
router.get("users") { request -> Future<[User]> in
if let minimumAge = request.query[Int.self, at: "above_age"] {
return User.query(on: request).filter(\.age > minimumAge).all()
}
return User.query(on: request).all()
}
如果該請求具有upper_age作為查詢參數,則路由器將返回該年齡以上的用戶列表,否則它將返回所有用戶。
常用代碼:
struct UserFormInput: Codable {
let aboveAge: UInt
enum CodingKeys: String, CodingKey {
case aboveAge= "above_age"
}
}
使用slug格式的GET(不適用於此用例):
localhost:8080/users/above_age/25
router.get("users", "above_age", Int.parameter) { req in
let age = try req.parameters.next(Int.self)
return "user id: \(age)"
}
參考文獻:
使用帶有URL編碼參數的GET(使用先前的答案進行更新):
localhost:8080/users?above_age=25
router.get("users") { request -> Future<[User]> in
let minimumAge = try? request.query.get(Int.self, at: "above_age")
// do something
}
要么
router.get("users") { request -> Future<[User]> in
let userQuery = try req.query.decode(UserFormInput.self)
// do something
}
參考文獻:
使用POST:
router.post("users") { req in
return try req.content.decode(UserFormInput.self)
.flatMap { input in
return // do something
}
}
參考文獻:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.