本文主要讲述如何在Rust中使用Rocket搭建简易Web服务
1.添加Rocket库
Cargo.toml
[dependencies]
rocket = { version = "0.5.1", features = ["secrets"] }
2.创建服务
2.1 创建一个启动脚本
main.rs
use rocket::{launch,routes};
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![]) //这里先将网站挂载到根目录
}
2.2 创建服务
2.2.1 创建一个Get方式
- 简单的get响应
main.rs
use rocket::get;
#[get("/hello_world")]
async fn hello_world() -> String {
"Hello World".to_string()
}
- 从get(浏览器输入的路径)获取参数
main.rs
#[get("/hello/<id>")]
async fn get_id(id:String) -> String{
id
}
- 输入文件名并读取HTML格式文件并返回
main.rs
use std::fs;
use std::path::Path;
use rocket::http::ContentType;
#[get("/html/<id>")]
async fn code(id:String) -> Option<(ContentType,String)>{
let path = Path::new(&id);
if let Ok(s) = fs::read_to_string(path){
Some((ContentType::HTML,s))
} else {
None
}
}
2.2.2 创建一个静态文件服务
use std::path::PathBuf;
use rocket::fs::NamedFile;
#[get("/<file..>")]
async fn html(file: PathBuf) -> Option<NamedFile> {
NamedFile::open(Path::new("./").join(file)).await.ok()
//如果将文件放在了xxx文件夹,就将Path::new("./")改为Path::new("./xxx/")
}
2.3 挂载服务
- 让我们回到 2.1 时创建的启动脚本,将上面的几个服务挂载上去
main.rs
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![hello_world,get_id,code,html])
}
此时输入 cargo run 就会发现服务已经运行在 127.0.0.1:8000
3 配置文件
- 在网站目录下(跟Cargo.toml同级的目录)创建一个名为 Rocket.toml 的文件
[global]
port = 80
address = "127.0.0.1"
secret_key = "MTE0NTE0MTkxOTgxMDExNDUxNDE5MTk4MTAxMTQ1MTQxMTQ1MTQxOTE5ODEwMTE0NTE0MTkxOTgxMDExNDUxNA=="
//secret_key请输入随机base64加密的256-bit密钥
//可以使用命令 openssl rand -base64 32 生成
//或者随机输入64个字母或者数字进行base64加密