正确呈现 actix-web 端点处理程序的 HTML 输出的最简单方法是什么?
What's the easiest way to get the HTML output of an actix-web endpoint handler to be rendered properly?
我已经像这样使用 actix-web 定义了一个端点:
#[derive(Deserialize)]
struct RenderInfo {
filename: String,
}
fn render(info: actix_web::Path<RenderInfo>) -> Result<String> {
// ...
}
App::new()
.middleware(middleware::Logger::Default())
.resource("/{filename}", |r| r.get().with(render))
我 运行 遇到的问题是原始 HTML 显示在浏览器中而不是被渲染。我认为内容类型设置不正确。
我看到的大多数 actix-web 示例都使用 impl Responder
作为 return 类型,但我无法弄清楚如何解决所产生的类型推断问题。原因似乎与文件操作有关 returning 标准 failure::Error
-based 类型。看起来 actix_web 需要实施特殊的 WebError
来阻止意外的错误传播。对于这个特定的实例,我并不关心,因为它更像是一个内部工具。
来自actix-web examples, use HttpResponse
:
fn welcome(req: &HttpRequest) -> Result<HttpResponse> {
println!("{:?}", req);
// session
let mut counter = 1;
if let Some(count) = req.session().get::<i32>("counter")? {
println!("SESSION value: {}", count);
counter = count + 1;
}
// set counter to session
req.session().set("counter", counter)?;
// response
Ok(HttpResponse::build(StatusCode::OK)
.content_type("text/html; charset=utf-8")
.body(include_str!("../static/welcome.html")))
}
我已经像这样使用 actix-web 定义了一个端点:
#[derive(Deserialize)]
struct RenderInfo {
filename: String,
}
fn render(info: actix_web::Path<RenderInfo>) -> Result<String> {
// ...
}
App::new()
.middleware(middleware::Logger::Default())
.resource("/{filename}", |r| r.get().with(render))
我 运行 遇到的问题是原始 HTML 显示在浏览器中而不是被渲染。我认为内容类型设置不正确。
我看到的大多数 actix-web 示例都使用 impl Responder
作为 return 类型,但我无法弄清楚如何解决所产生的类型推断问题。原因似乎与文件操作有关 returning 标准 failure::Error
-based 类型。看起来 actix_web 需要实施特殊的 WebError
来阻止意外的错误传播。对于这个特定的实例,我并不关心,因为它更像是一个内部工具。
来自actix-web examples, use HttpResponse
:
fn welcome(req: &HttpRequest) -> Result<HttpResponse> {
println!("{:?}", req);
// session
let mut counter = 1;
if let Some(count) = req.session().get::<i32>("counter")? {
println!("SESSION value: {}", count);
counter = count + 1;
}
// set counter to session
req.session().set("counter", counter)?;
// response
Ok(HttpResponse::build(StatusCode::OK)
.content_type("text/html; charset=utf-8")
.body(include_str!("../static/welcome.html")))
}