使用 actix-web 2.0 提供静态文件

2023-12-12

我正在与 Rust 的 actix-web 2.0 框架作斗争。我希望我的 rust 服务器能够为我的 index.html 文件提供服务,但大多数可用的帮助都是旧版本的,因此新版本中发生了很多变化。我尝试了以下代码,但它不适用于 actix-web 2.0。请在 actix-web 2.0 中提出一些可行的解决方案。

use actix_files::NamedFile;
use actix_web::{HttpRequest, Result};
async fn index(req: HttpRequest) -> Result<NamedFile> {
    Ok(NamedFile::open(path_to_file)?)
}

通过尝试答案中给出的代码,我可以提供单个 html 文件,但它无法加载链接的 JavaScript 文件。我尝试过以下建议的方法https://actix.rs/docs/static-files/为目录提供服务。

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
    dotenv::dotenv().ok();
    std::env::set_var("RUST_LOG", "actix_web=debug");
    let database_url = std::env::var("DATABASE_URL").expect("set DATABASE_URL");

    // create db connection pool
    let manager = ConnectionManager::<PgConnection>::new(database_url);
    let pool: Pool = r2d2::Pool::builder()
        .build(manager)
        .expect("Failed to create pool.");
    
    //Serving the Registration and sign-in page
    async fn index(_req: HttpRequest) -> Result<NamedFile> {
        let path: PathBuf = "./static/index.html".parse().unwrap();
        Ok(NamedFile::open(path)?)
    }

    // Start http server
    HttpServer::new(move || {
        App::new()
            .data(pool.clone())
            .service(fs::Files::new("/static", ".").show_files_listing())
            .route("/", web::get().to(index))
            .route("/users", web::get().to(handler::get_users))
            .route("/users/{id}", web::get().to(handler::get_user_by_id))
            .route("/users", web::post().to(handler::add_user))
            .route("/users/{id}", web::delete().to(handler::delete_user))
    })
    .bind("127.0.0.1:8080")?
    .run()
    .await
}

以上是我的主要方法。在浏览器控制台中,我仍然收到无法加载 Registration.js 资源的错误。以下是我的文件夹结构:

-migrations
-src
  -main.rs
  -handler.rs
  -errors.rs
  -models.rs
  -schema.rs
-static
 -index.html
 -Registration.js
-target
Cargo.toml
.env
Cargo.lock
diesel.toml

我已经使用数据库集成构建了后端,并且通过curl 命令检查它工作正常,现在我正在尝试构建前端并作为尝试提供静态文件的第一步。


我不确定您面临什么问题,因为描述不详细,但是,我运行了默认示例并且它正在工作。

use actix_files::NamedFile;
use actix_web::{HttpRequest, Result};
use std::path::PathBuf;

/// https://actix.rs/docs/static-files/
async fn index(_req: HttpRequest) -> Result<NamedFile> {
    let path: PathBuf = "./files/index.html".parse().unwrap();
    Ok(NamedFile::open(path)?)
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
    use actix_web::{web, App, HttpServer};

    HttpServer::new(|| App::new().route("/", web::get().to(index)))
        .bind("127.0.0.1:8088")?
        .run()
        .await
}

项目结构

- files/index.html
- src/index.rs
- cargo.toml

依赖关系

[dependencies]
actix-web = "2.0.0"
actix-files = "0.2.2"
actix-rt = "1.1.1"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 actix-web 2.0 提供静态文件 的相关文章

随机推荐

  • 如何在 Bootstrap 5 中使用单独的 JS 文件?

    我正在使用 Bootstrap 但想减小 Javascript 的大小 我只需要下拉 折叠 有时还需要轮播 所以我只想包含这些 每个脚本都有一个文件夹 dist 我尝试通过 SCRIPT 标签包含它们 它根本不起作用 并在控制台中产生很多错
  • Google 地图自动完成 API 未添加地址选项

    我正在尝试实现这个https developers google com maps documentation javascript examples places autocomplete addressform在使用 ASP NET 构
  • 同时使用 git2 和 hyper:openssl 链接多次

    我正在尝试构建同时使用 hyper 和 git2 的东西 现在我遇到了 openssl 链接两次的问题 提示牧马人带我去货运站features我尝试过 但我仍然卡住了 我遇到的确切错误cargo build如下 error native l
  • 如何在nativescript中访问webpack环境变量?

    我想在 webpack config js 中存储一个环境变量 当我在 Nativescript 中将应用程序与 webpack 捆绑在一起时 我将设置该环境变量 目标是即使在捆绑之后也能保持环境变量的秘密 我怎么做 我相信这应该是可能的
  • 如何用中断串口读取串口?

    我正在尝试在 Linux 中读取 NMEA 消息 但我无法得到完整的消息 54 441 V 0 00 0 00 010720 N 42 GPVTG 0 00 T M 0 00 N 0 00 K N 32 GPGGA 020954 441 0
  • CakePHP 3.x - hasMany 通过关联 - 查找

    假设我的设置与 CookBook 中的设置完全相同 http book cakephp org 3 0 en orm associations html class StudentsTable extends Table public fu
  • JavaScript 中的 HTML 助手?

    在 Razor 中我可以这样做 p person Name p 要渲染这样的东西 p Fred p 我真的必须在 不引人注目的 JavaScript 中执行此操作吗 p data custom person id 1234567890 cs
  • IE8 中的不透明度适用于

    ,但不适用于

    我的 IE8 有问题 无法执行 a 元素透明 我发现了这些相关的问题 但我对那里提供的答案没有任何运气 不透明度 CSS 在 IE8 中不起作用 网页不透明 我试过了 给予布局 通过使用zoom 1 但这并没有帮助 这是我的测试 CSS 摘
  • Matplotlib 在图像上制作动画

    我正在尝试为图像上的一堆不断更新的点设置动画 想象一下使绘制的点在某些图像上对角移动 我在这里查看了动画示例 http matplotlib org examples animation dynamic image html 但我不确定如何
  • 在 cxf Servlet 上找不到资源类

    我创建了一个非常简单的 cxf 非基于 spring 的 Servlet 它加载一个javax ws rs Application type 这是 web xml
  • 将 COM 对象动态转换为 COM 接口不会增加引用计数,不是吗?

    如果我有一个 C 类 X 它实现了 COM 接口 IY 和 IZ 并且我有一个指向 X 类型对象的 IY 接口的指针 y 我会这样做 IZ z dynamic cast
  • Sqlite3 / python - 从sqlite导出到csv文本文件不超过20k

    我正在尝试将 sqlite 表导出到文本文件 我在这个站点上找到了一些很大的帮助 它对于较小的输出非常有效 但一旦我达到 20k 左右 它似乎就会限制输出 第一次尝试是 Mark Bell 的 Unicode Writer 位于是否可以将表
  • Visual Studio 中的“优化代码”选项到底有什么作用?

    选项的名称说明了一些事情 但是 Visual Studio 编译器到底做了什么以及真正的后果是什么 编辑 如果你搜索谷歌你可以找到这个地址 但这并不是我真正想要的 我想知道真实发生的事情 例如为什么循环的时间更少等等 如果没有优化 编译器会
  • mongodb:如何通过索引号更新数组元素

    假设您有这样的文档 id sdsdfsd a x 0 y 0 z 0 x 0 y 0 z 0 x 0 y 0 z 0 x 0 y 0 z 0 所以 如果你有 id和一个索引号 比如 2 现在 对于该索引我想更改x值为 1 这在 mongo
  • 与 @Autowired 的绑定在以“new”启动的实例内不起作用

    在我的 web spring 应用程序中 我创建一个带有关键字的实例new如下 在我的动作类之一中 存在以下方法 public void process MyBean b new MyBean initiated the instance
  • 如何使用 Glide 库对图像进行圆角处理?

    那么 有人知道如何用 Glide 显示圆角图像吗 我正在使用 Glide 加载图像 但我不知道如何将舍入参数传递给该库 我需要显示图像 如下例所示 滑翔V4 Glide with context load url circleCrop in
  • Python字典创建错误

    我正在尝试从存储的列表创建 Python 字典 第一种方法有效 gt gt gt myList gt gt gt myList append Prop1 gt gt gt myList append Prop2 gt gt gt myDic
  • 使用 Apache Solr 索引 pdf 文件内容

    我正在使用 Solrphp 扩展用于与 Apache Solr 交互 我正在从数据库中索引数据 我还想索引外部文件 如 PDF PPTX 的内容 索引的逻辑是 假设schema xml定义了以下字段
  • 美国各州和城市的 Tiger/Lines 或 shapefile?

    我被要求根据美国的州和城市生成一些人口统计报告 犯罪率 出生 死亡等 我拥有所有人口统计数据 由我们的客户提供 但似乎找不到任何有美国各州及其城市边界 阅读 纬度 经度 的地方 我们的数据是经纬度数据点 例如犯罪 出生等 我们希望获得一些映
  • 使用 actix-web 2.0 提供静态文件

    我正在与 Rust 的 actix web 2 0 框架作斗争 我希望我的 rust 服务器能够为我的 index html 文件提供服务 但大多数可用的帮助都是旧版本的 因此新版本中发生了很多变化 我尝试了以下代码 但它不适用于 acti