1个不稳定版本
0.1.0 | 2021年4月5日 |
---|
#1420 在 HTTP服务器
21KB
283 行
actix-plus-static-files
法律
在 MIT
或 UNLICENSE 下双授权。
概述
- 通过方便的宏在可执行文件中嵌入静态资源
- 在
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