简单的铁路由

此示例将使用 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();

接下来,我们声明两个内联函数,即我们的处理程序 handlerquery_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 响应,根下面的任何东西都应该重复路径。

此示例的下一步可能是路由的分离和静态页面的提供。