#actix-web #static #web #static-file #web-apps #http #serve-static

actix-plus-static-files

一个库,与actix-web和include_dir集成,通过宏干净地打包静态资源(例如前端)与actix-web二进制文件,从而在运行时从RAM中提供这些资源,并通过将整个Web应用程序包含在一个可执行二进制文件中简化部署;由Alexander Korolev的actix-web-static-files分支

1个不稳定版本

0.1.0 2021年4月5日

#1420HTTP服务器

Unlicense OR MIT

21KB
283

actix-plus-static-files

MITUNLICENSE 下双授权。

概述

  • 通过方便的宏在可执行文件中嵌入静态资源
  • actix-web 中将静态资源作为目录提供
  • 支持类似Angular的路由器
  • 由Alexander Korolev分支的actix-web-static-files

用法

用例#1:静态资源文件夹

在你的项目中创建一个包含静态资源的文件夹(例如 static

cd project_dir
mkdir static
echo "Hello, world" > static/hello

Cargo.toml 依赖项添加到 actix-web-static-files

[dependencies]
actix-plus-static-files = "0.1.0"

在Actix Web应用程序中包含静态文件

use actix_web::{App, HttpServer};
use actix_plus_static_files::{build_hashmap_from_included_dir, ResourceFiles, Dir, include_dir};

const DIR: Dir = include_dir!("./examples/static");

#[actix_web::main]
async fn main() {
    HttpServer::new(|| {
        let hash_map = build_hashmap_from_included_dir(&DIR);
        App::new().service(ResourceFiles::new("/", hash_map))
    })
        .bind("127.0.0.1:8192")
        .expect("Failed to bind to port")
        .run()
        .await
        .expect("Failed to run server");
}

运行服务器

cargo run

请求资源

$ curl -v https://127.0.0.1:8080/static/hello
*   Trying 127.0.0.1:8080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /static/hello HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.65.3
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-length: 13
< date: Tue, 06 Aug 2019 13:36:50 GMT
<
Hello, world
* Connection #0 to host localhost left intact

用例#2:类似Angular的应用程序

如果你使用Angular(或任何其他大量此类库,如Svelte + Routify)作为前端,你可能希望通过前端应用程序的 index.html 解析所有未找到的调用。为此,只需在资源创建后调用方法 resolve_not_found_to_root 即可。

use actix_web::{App, HttpServer};
use actix_plus_static_files::{build_hashmap_from_included_dir, ResourceFiles, Dir, include_dir};

const DIR: Dir = include_dir!("./examples/static");

#[actix_web::main]
async fn main() {
    HttpServer::new(|| {
        let hash_map = build_hashmap_from_included_dir(&DIR);
        App::new().service(ResourceFiles::new("/", hash_map).resolve_not_found_to_root())
    })
        .bind("127.0.0.1:8192")
        .expect("Failed to bind to port")
        .run()
        .await
        .expect("Failed to run server");
}

请记住将静态资源路由放置在其他所有路由之后。

依赖项

~28MB
~585K SLoC