CSS 使用 actix-web 和 maud 无法正确读取文件

CSS file is not read properly using actix-web and maud

CSS 无法通过 actix-web 的 maud 的 link rel 属性工作。我在哪里犯了错误?

我认为我写link rel 属性的位置是正确的。

main.rs

use actix_files as fs;
use actix_web::{get, App, HttpServer, Result as AwResult};
use maud::{html, Markup};

#[get("/")]
async fn index() -> AwResult<Markup> {
    Ok(html! {
        head{
            link rel="stylesheet" href="/static/style.css"{};
        }
       title{"Help me"}

       p {"Blue text should be shown."}

    })
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new()
            .service(fs::Files::new("/static", ".").show_files_listing())
            .service(index)
    })
    .bind("0.0.0.0:80")?
    .run()
    .await?;
    Ok(())
}

style.css

p {
    color: blue;
    font-size: 50px;
}

正在查看 actix_files::Files 的文档:

The first argument (mount_path) is the root URL at which the static files are served.

The second argument (serve_from) is the location on disk at which files are loaded.

您正在使用 /static 作为第一个参数,所以您的文件将在 http://0.0.0.0:80/static 下,好的。

但是作为第二个参数,您设置 . 是项目的根目录。这意味着您正在发布项目的整个源代码!例如,在 http://0.0.0.0:80/static/src/main.rshttp://0.0.0.0:80/static/ 是挂载点,./src/main.rs 是本地文件)您将下载二进制文件的源代码,而您不希望这样。

要解决您的问题,请改写:

fs::Files::new("/static", "./static")

第二个参数中的./当然是可选的,但我喜欢它,因为它提醒你它是相对于当前工作目录的。