iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
Software Development

Rust的多方面運用系列 第 24

[Day24] Rocket Web 框架 (Part 1)

  • 分享至 

  • xImage
  •  

今天要講的是 Rocket
那我先簡述一下什麼是 Rocket
Rocket 是一個致力於實現 快速、簡單、彈性且安全 的 Web 框架
然後 最近有推出一個新的框架叫做 poem
他設計者的理念是要做出最簡單使用的 Rust Web 框架
有興趣可以研究看看 但是目前文獻較少
抱歉離題了
這幾天的主題是 Rocket 那麼
該如何使用呢
請先將 Rust 版本設為 nightly
指令為

$ rustup override set nightly
也可以
$ rustup default nightly

差別只在上面是更改專案的
下面則是整體環境 也就是整個系統
這次使用的版本為 0.5.0-rc.1
跟直接 cargo add rocket 出來的版本不一樣
請注意一下

#[macro_use] extern crate rocket;

#[get("/")]
fn hello() -> &'static str {
    "Hello, world!"
}
#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![hello])
}

最基礎的代碼應該要長這樣
跑起來預設應該是 127.0.0.1:8080
會輸出 Hello, world!
那麼 mount 其實不只能用一個參數
也可以塞兩個在裡面

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![hello, hi])
}

以此類推
但是要注意的是 不能夠有兩個同樣路徑的傳入

然後如果說要直接取 uri 的值的話
像是

#[get("/<name>")]
fn hello(name: String) -> String {
    format!("Hello, {}!", name.as_str())
}

這樣就能夠取到 / 後的值
至於 format 我之前沒講過 總之就是能夠接合 String 的一個東西
然後 如果說 出現這種情況

#[get("/<num>")]
fn hello(num: i32) -> String {
    format!("Your number = {}!", num)
}

然後使用者輸入其他形式就會跑到 404
如果你希望使用者能得到其他訊息就可以多加這個

#[get("/<num>", rank = 2)]
fn hello2(num: String) -> String {
    format!("Error type")
}

當然 這只是舉例
用法有很多種
rank 在 Rocket 中就是一個階層
如果說今天發現現在的格式符合現在的條件 就會跳到下一個 rank 或是跑到 404 這主要可以用在登入系統的部份
講到 404

應該大部分人的 404 都是這個樣子

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![hello]).register("/", catchers![not_found])
}

如果這樣寫就能使用自己定義的 404 page 了
這邊官方文本還是舊的

然後大部分人應該都不會直接在 .rs 檔裡面直接用 html 語法吧
這邊講一下如何引入 html 檔在路

use rocket::fs::{relative, FileServer};

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", FileServer::from(relative!("static")))
}

這樣寫的話 就能夠將 static 資料夾中的檔案都引入進去


今天講的稍微有點亂了
但是主軸還是 Rocket 框架的基礎
明天講一下怎麼接收 post 跟 使用 json 格式


上一篇
[Day23] Rust 直接使用資料庫語法操作資料庫 (Part2)
下一篇
[Day25] Rocket 序列化和反序列化以及 POST (Part 2)
系列文
Rust的多方面運用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言