vapor学习教程-Basic Routing
2017-04-06 本文已影响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
符合任何对象的错误Error
。vapor
带有默认错误枚举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>"
}
如果要覆盖此行为,请将AbortMiddleware
从Droplet
中间件中删除并添加自己的中间件。
Fallback
回调路由允许匹配多层嵌套斜杠。
app.get("anything", "*") { request in
return "Matches anything after /anything"
}
例如,上述路由符合以下所有条件:
- /anything
- /anything/foo
- /anything/foo/bar
- /anything/foo/bar/baz
- ...
继续学习vapor学习教程-目录