簡單的鐵路由

此示例將使用 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 響應,根下面的任何東西都應該重複路徑。

此示例的下一步可能是路由的分離和靜態頁面的提供。