概述
在看书的时候,用到了actix-web这个框架的案例。
书里面的版本是1.0,但是我看官网最新都4.4了。
为了抹平这种信息差,所以我决定把官方提供的示例代码过一遍。
核心代码
Cargo.toml
[package]
name = "hello"
version = "0.1.0"
edition = "2021"
[dependencies]
actix-web = "4.4"
env_logger = "0.11"
log = "0.4"
main.rs
use actix_web::{middleware, web, App, HttpRequest, HttpServer};
async fn index(req: HttpRequest) -> &'static str {
    println!("REQ: {req:?}");
    "Hello world!"
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
    env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
    log::info!("starting HTTP server at http://192.168.77.129:8000");
    
    let server = HttpServer::new(|| {
        App::new()
            .wrap(middleware::Logger::default())
            .service(web::resource("/index.html").to(|| async {"Hello html!"}))
            .service(web::resource("/").to(index))
    });
    server.bind("0.0.0.0:8000")?
        .run()
        .await
}
运行和访问
http://192.168.77.129:8000/
 
http://192.168.77.129:8000/index.html
 
代码解读
引入依赖:
use actix_web::{middleware, web, App, HttpRequest, HttpServer};
首页路由:
- 获取请求信息:index(req: HttpRequest)
- 返回一个纯文本字符串:&'static str
async fn index(req: HttpRequest) -> &'static str {
    println!("REQ: {req:?}");
    "Hello world!"
}
入口方法:
- 定义入口方法:#[actix_web::main]
- 声明入口方法:async fn main() -> std::io::Result<()> {
- 初始化日志:env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
- 记录一个info级别的日志:log::info!("starting HTTP server at http://192.168.77.129:8000");
- 创建服务对象:let server = HttpServer::new(|| {
- 使用日志中间件:.wrap(middleware::Logger::default())
- 挂载路由/index.html:.service(web::resource("/index.html").to(|| async {"Hello html!"}))
- 挂载路由/:.service(web::resource("/").to(index))
- 启动服务:server.bind("0.0.0.0:8000")?
#[actix_web::main]
async fn main() -> std::io::Result<()> {
    env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
    log::info!("starting HTTP server at http://192.168.77.129:8000");
    
    let server = HttpServer::new(|| {
        App::new()
            .wrap(middleware::Logger::default())
            .service(web::resource("/index.html").to(|| async {"Hello html!"}))
            .service(web::resource("/").to(index))
    });
    server.bind("0.0.0.0:8000")?
        .run()
        .await
}



















