Rust如何编制前端路由

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

rust 复制代码
/// 设置 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、要用客户端接管所有的路由处理

ts 复制代码
# svelte.config.js
		adapter: adapter({
			fallback: 'index.html',
		}),
相关推荐
(╹◡╹)3 分钟前
11.RK3588本地大模型内存评估优化
java·linux·前端
电气研究所21 分钟前
Java + Redis 实现工业设备告警去抖,避免变频器故障重复推送
java·前端
AI视觉网奇24 分钟前
cannot import name ‘model_urls‘ from ‘torchvision.models.resnet‘
linux·前端·javascript
Vuji28 分钟前
深入 pi-agent 内核:完整追踪一次 CLI 交互的完整链路
前端·agent
zfoo-framework39 分钟前
安装pi agent 支持duojie和deepseek
java·服务器·前端
l1m0_1 小时前
告别反复修改Prompt:AI生成React应用并落地开发的实战复盘
前端·react.js·ui·ai·设计
xexpertS1 小时前
前端工程转型实践:从 Ember 迁移到 React,提升构建速度与研发效能
前端·react.js·前端框架
大家的林语冰1 小时前
👍 JS 还在进化,ES2026 正式推出,最新七大特性补全!
前端·javascript·json
铁皮饭盒1 小时前
DeepSeek V4 Pro 0813发布了, 也可以部署到 Codex 了
前端·javascript·后端
k4m7v2pz2 小时前
Rust 长跑守护进程日志治理:切分、时区与结构化
开发语言·后端·rust·日志系统·日志轮转·ndjson