美文网首页
vapor学习教程-Collection

vapor学习教程-Collection

作者: 晓蜻蜓 | 来源:发表于2017-04-10 14:03 被阅读0次

    Route Collections

    路由集合允许将多个路由和路由组组织在不同的文件或模块中。

    Example


    以下是v1API部分的路由集合示例:

    import Vapor
    import HTTP
    import Routing
    
    class V1Collection: RouteCollection {
        typealias Wrapped = HTTP.Responder
        func build<B: RouteBuilder where B.Value == Wrapped>(_ builder: B) {
            let v1 = builder.grouped("v1")
            let users = v1.grouped("users")
            let articles = v1.grouped("articles")
    
            users.get { request in
                return "Requested all users."
            }
    
            articles.get(Article.self) { request, article in
                return "Requested \(article.name)"
            }
        }
    }
    

    这个类可以放在任何文件中,可以将它添加到vapor或甚至添加到另一个路由组中。

    let v1 = V1Collection()
    drop.collection(v1)
    

    然后Dropletbuild(_:)方法传递给路由集合,并添加各种路由。

    Breakdown


    我们逐一分解路由集合,来了解它们到底生发了什么。

    typealias Wrapped = HTTP.Responder
    

    这限制了路由集合只添加HTTP响应。虽然底层路由器能够路由任何类型,但Vapor只针对HTTP响应者。如果在vapor要使用这个路由集合,首先它的包裹类型需要匹配。

    func build<B: RouteBuilder where B.Value == Wrapped>(_ builder: B) {
    

    这个方法接收一个路由构造器并通过接收Wrapped来验证路由构造器,如上一行所定义,HTTP.Responders。vaporDropletVapor创建的任何路由组都是只接受HTTP响应的RouteBuilders。

    let v1 = builder.grouped("v1")
    

    从上面代码看出,照常可以通过builder来创建路由。builder:B同样像Droplet或路由组一样工作。任何在Droplet和路由组上工作的方法都可以在这个builder上工作。

    Empty Initializable


    如果有空的init方法,可以将EmptyInitializable添加到路由集合。这允许通过其类型名称添加路线集合。

    class V1Collection: RouteCollection, EmptyInitializable {
        init() { }
        ...
    

    现在我们可以添加到集合而不初始化它。

    drop.collection(V1Collection.self)
    

    继续学习vapor学习教程-目录

    相关文章

      网友评论

          本文标题:vapor学习教程-Collection

          本文链接:https://www.haomeiwen.com/subject/eoljattx.html