簡體   English   中英

路由時如何在請求中傳遞參數(使用Vapor的Server Side Swift)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM