[Day24] Rocket Web 框架 (Part 1)

今天要讲的是 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 格式


<<:  Day-16 OS初体验

>>:  第二十三天:在 TeamCity 上产生覆盖率报告

Day21 跟着官方文件学习Laravel-Encryption

大家好,今天要介绍 Laravel 其中一个功能'加密',我会将这个加密加入我的专案实作之中。lar...

Leetcode 79 Word Search (JavaScript) 的问题

各位邦友好,敝人想问一下leetcode https://leetcode.com/problems...

【Day 11】Python os.path模组

OS模组(Python内建) 说明 : os模组是一种与作业系统相关的模组,提供数十种与作业系统沟通...

Day 5 他国气象局网站分析(加、日、台)

接下来我会看看相关网页是如何设计的,这里参考了约 10 个国家的气象局官网,但囿於内容篇幅,仅简单列...

Day28 - 【概念篇】Keycloak使用基本概念 - 第二部分: Role

本系列文之後也会置於个人网站 在帐号系统下,除了帐号本身与帐号群组外,通常还存在一个非常重要的部分...