简单的铁路由
此示例将使用 Iron 提供基本 Web 路由。
首先,你需要将 Iron 依赖项添加到 Cargo.toml
文件中。
[dependencies]
iron = "0.4.*"
我们将使用 Iron 自己的路由器库。为简单起见,Iron 项目将此库作为 Iron 核心库的一部分提供,无需将其作为单独的依赖项添加。接下来我们引用 Iron 库和 Router 库。
extern crate iron;
extern crate router;
然后我们导入所需的对象以使我们能够管理路由,并向用户返回响应。
use iron::{Iron, Request, Response, IronResult};
use iron::status;
use router::{Router};
在这个例子中,我们将通过在 main()
函数中编写路由逻辑来保持简单。当然,随着应用程序的增长,你将需要分离路由,日志记录,安全性问题以及 Web 应用程序的其他方面。目前,这是一个很好的起点。
fn main() {
let mut router = Router::new();
router.get("/", handler, "handler");
router.get("/:query", query_handler, "query_handler");
让我们回顾一下迄今为止我们取得的成就。我们的程序当前实例化一个新的 Iron Router
对象,并将两个处理程序附加到两种类型的 URL 请求:第一个(/
)是我们域的根,第二个(/:query
)是根目录下的任何路径。
通过在单词 query
之前使用分号,我们告诉 Iron 将 URL 路径的这一部分作为变量并将其传递给我们的处理程序。
下一行代码是我们如何实例化 Iron,指定我们自己的 router
对象来管理我们的 URL 请求。为简单起见,在此示例中,域和端口是硬编码的。
Iron::new(router).http("localhost:3000").unwrap();
接下来,我们声明两个内联函数,即我们的处理程序 handler
和 query_handler
。这些都用于演示固定 URL 和变量 URL。
在第二个函数中,我们从请求对象持有的 URL 中获取 query
变量,然后将其作为响应发送回用户。
fn handler(_: &mut Request) -> IronResult<Response> {
Ok(Response::with((status::Ok, "OK")))
}
fn query_handler(req: &mut Request) -> IronResult<Response> {
let ref query = req.extensions.get::<Router>()
.unwrap().find("query").unwrap_or("/");
Ok(Response::with((status::Ok, *query)))
}
}
如果我们运行此示例,我们将能够在 localhost:3000
的 Web 浏览器中查看结果。域的根应该用 OK
响应,根下面的任何东西都应该重复路径。
此示例的下一步可能是路由的分离和静态页面的提供。