vapor学习教程-Collection

2017-04-10  本文已影响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学习教程-目录

上一篇下一篇

猜你喜欢

热点阅读