You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Actix中返回并记录自定义Tera模板渲染错误信息

解决方案

你当前的问题是在map_err回调中直接丢弃了Tera返回的原始错误对象,只用了固定字符串作为错误提示,按下面的方式修改路由处理函数即可实现需求:

修改tst路由的错误处理逻辑即可:

#[get("/")]
async fn tst() -> Result<HttpResponse, Error> {
    let mut ctx = Context::new();
    let title = String::from("Test");
    ctx.insert("title", &title);
    let body = TEMPLATES.render("index.html", &ctx)
        .map_err(|e| {
            // 将原始错误输出到stderr做日志记录
            eprintln!("Tera模板渲染错误: {}", e);
            // 把真实错误信息封装到响应中返回
            error::ErrorInternalServerError(format!("Tera渲染失败: {}", e))
        })?;
    Ok(HttpResponse::Ok().body(body))
}

补充说明

  • Tera的错误类型已经实现了std::fmt::Display trait,可以直接格式化输出完整错误原因,包括模板文件不存在、变量未定义、模板语法错误等具体信息。
  • 如果是生产环境部署,建议不要把原始模板错误直接返回给前端用户,避免泄露项目结构等敏感信息,可仅在开发环境开启完整错误返回,生产环境返回通用提示、后台保留错误日志即可。

内容的提问来源于stack exchange,提问作者NarūnasK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:54:04