M isaka E
「——天明明是这么的蓝 前途却是一片黑暗」

[Rust]使用Rocket框架搭建简单Web服务

本文主要讲述如何在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加密

大功告成,此时一个基本的web服务就搭建好了

posted @ 2024-08-04 18:53  MisakaE  阅读(387)  评论(0编辑  收藏  举报