Какой самый простой способ получить правильный вывод HTML-кода обработчика конечной точки actix-web?
Я определил конечную точку с помощью 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
для возвращаемого типа, но я не смог выяснить, как исправить возникшие проблемы вывода типа. Кажется, причина в том, что файловые операции возвращают стандарт failure::Error
на основе типа. Похоже, что actix_web требует реализации специального WebError
блокировать непреднамеренное распространение ошибок. Для этого конкретного случая мне все равно, потому что это скорее внутренний инструмент.
1 ответ
Из примеров actix-web используйте 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")))
}