美文网首页
vapor学习教程-Basic Routing

vapor学习教程-Basic Routing

作者: 晓蜻蜓 | 来源:发表于2017-04-06 17:54 被阅读0次

    Basic Routing

    路由是这个web框架至关重要的部分,路由器决定哪些请求获得哪些响应。
    Vapor具有大量的路由功能,包括路由构建器,组和集合。本节中,将介绍路由的基础知识。


    Register

    最基本的路由包含方法,路径和关闭。

    drop.get("welcome") { request in
        return "Hello"
    }
    

    有效的标准HTTP方法包含有:get, post, put, patch, delete, and options.

    drop.post("form") { request in
        return "Submitted with a POST request"
    }
    

    也可以使用any来匹配所有方法。

    Nesting

    要嵌套路径(/在URL中添加s),只需添加逗号。

    drop.get("foo", "bar", "baz") { request in
        return "You requested /foo/bar/baz"
    }
    

    也可以使用/,但通过类型安全路由逗号通常比较容易输入并工作得更好

    Alternate

    接受一个Method作为第一个参数的备用语法也是可用的。

    drop.add(.trace, "welcome") { request in
        return "Hello"
    }
    

    如果要动态注册路由或使用较不常用的方法,这可能很有用。

    Request

    每个路由关闭被赋予单个请求,这包含与导致路由关闭被调用的请求相关联的所有数据。

    Response Representable

    路由关闭可以通过三种方式返回:

    • Response
    • ResponseRepresentable
    • throw

    Response

    可以返回自定义响应。

    drop.get("vapor") { request in
        return Response(redirect: "http://vapor.codes")
    }
    

    这对于创建特殊响应(如重定向)非常有用。对于要向响应中添加Cookie或其他项目的情况也是有用的。

    ResponseRepresentable

    正如在前面的例子中看到的,String可以在路由关闭中返回。这是因为它们符合ResponseRepresentable
    Vapor中的很多类型默认符合此协议:

    • String
    • Int
    • JSON
    • Model
    drop.get("json") { request in
        return try JSON(node: [
            "number": 123,
            "text": "unicorns",
            "bool": false
        ])
    }
    

    想了解更多node,请阅读有关Node更多信息

    Throwing

    若无法返回,则抛出throw符合任何对象的错误Errorvapor带有默认错误枚举Abort

    drop.get("404") { request in
        throw Abort.notFound
    }
    

    通过使用Abort可以自定义这些错误的信息

    drop.get("error") { request in
        throw Abort.custom(status: .badRequest, message: "Sorry 😱")
    }
    

    这些错误默认情况下被捕获AbortMiddleware,如下所示的Json响应中:

    {
        error: true,
        message: "<the message>"
    }
    

    如果要覆盖此行为,请将AbortMiddlewareDroplet中间件中删除并添加自己的中间件。

    Fallback


    回调路由允许匹配多层嵌套斜杠。

    app.get("anything", "*") { request in
       return "Matches anything after /anything"
    }
    

    例如,上述路由符合以下所有条件:

    • /anything
    • /anything/foo
    • /anything/foo/bar
    • /anything/foo/bar/baz
    • ...

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

    相关文章

      网友评论

          本文标题:vapor学习教程-Basic Routing

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