Какой самый простой способ получить вывод HTML обработчика конечной точки actix-web для правильной визуализации? - PullRequest
0 голосов
/ 07 ноября 2018

Я определил конечную точку с помощью 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 Ответ

0 голосов
/ 07 ноября 2018

Из примеров 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")))
}
...