当前位置: 首页 > article >正文

Rust如何编制前端路由

目的:根据前端build文件夹下的目录结构,生成路由,将前端html文件返回。

/// 设置 HTML 文件路由
pub fn route(cfg: &mut web::ServiceConfig) {
    if Path::new("client/build/index.html").exists() {
        let index_content = match fs::read_to_string("client/build/index.html") {
            Ok(content) => content,
            Err(e) => {
                log::error!("无法读取 index.html: {}", e);
                return;
            }
        };

        let index_content = web::Data::new(index_content);

        cfg.service(
            web::resource("/user/authorize/")
                .app_data(index_content.clone())
                .route(web::get().to(serve_index)),
        );

        cfg.service(
            web::resource(
                "/condition-monitoring/parameter-display/parameter-list-display/create-list",
            )
            .app_data(index_content.clone())
            .route(web::get().to(serve_index)),
        );

        for entry in WalkDir::new("client/build") {
            if let Ok(entry) = entry {
                if entry.path().extension().map_or(false, |ext| ext == "html") {
                    if let Ok(rel_path) = entry.path().strip_prefix("client/build") {
                        let route_path = rel_path
                            .with_extension("")
                            .to_string_lossy()
                            .replace("\\", "/");
                        let route_path = if route_path.ends_with("index") {
                            route_path.trim_end_matches("index").to_string()
                        } else {
                            route_path.to_string()
                        };

                        cfg.service(
                            web::resource(format!("/{}", route_path))
                                .app_data(index_content.clone())
                                .route(web::get().to(serve_index)),
                        );
                    }
                }
            }
        }
    } else {
        log::error!("index.html 未找到");
    }
}

在使用 svelte开发的时候遇到以下问题:

1、+layout.ts 设置 trailingSlash = 'always' 之后,无法索引到正确路径;
解决方案:trailingSlash = 'never'
2、要用客户端接管所有的路由处理

# svelte.config.js
		adapter: adapter({
			fallback: 'index.html',
		}),

http://www.kler.cn/a/414555.html

相关文章:

  • 未成年人模式护航,保障安全健康上网
  • 软路由设置ip地址实现一机一IP
  • @[TOC](【接口调试】OpenAI ChatGPT API)
  • paimon的四种changelog模式(2)-none模式
  • ffmpeg 增亮 docker 使用
  • 面试(十一)
  • 生产Redis批量删除数据
  • 【Maven】Nexus私服
  • 【C++打怪之路Lv16】-- map set
  • 【新人系列】Python 入门(十三):函数进阶
  • 【jvm】什么是动态编译
  • 【金猿案例展】京东物流UData——物流行业数据分析智能体解决方案
  • Perplexica - AI 驱动的搜索引擎
  • 亚马逊反爬二之限流
  • FreeRTOS之链表源码分析
  • Android Studio 使用插件Database Navigation 连接 sqlite数据库
  • PHP学习_1
  • 【通俗理解】Transformer中位置编码与词嵌入的分离
  • GAMES101:现代计算机图形学入门-笔记-09
  • yolov5的pt模型转化为rk3588的rknn,并在rk3588上调用api进行前向推理
  • 鸿蒙启航日志:探索华为科技之旅的第一天
  • 【Bug】el-date-picker组件时间差
  • 23种设计模式-装饰器(Decorator)设计模式
  • Python websocket
  • BC-Linux8.6上面手动安装Postgresql17(Docker版)
  • 永久免费的PDF万能水印删除工具