Rocket 0.5如何返回HTML内容?导入Html模块报错解决
问题原因
Rocket 0.5版本对响应内容相关API做了不兼容变更,你使用的是0.4版本的旧写法,直接编译必然报错:
- 0.4版本用于包装HTML字符串的
content::Html类型,在0.5版本中已重命名为RawHtml,所属模块路径仍为rocket::response::content - 代码中未导入
content模块就直接以content::前缀调用类型,也会触发未声明模块的编译错误
正确实现方案
以下两种写法都可以在Rocket 0.5中正确返回HTML内容,按需选择即可:
方案1:使用RawHtml包装类型(与旧版使用逻辑一致)
完整可运行代码:
use rocket::*; use rocket::response::content::RawHtml; #[get("/")] fn index() -> RawHtml<&'static str> { RawHtml(r#" <title>GCD Calculator</title> <form action="/gcd" method="post"> <input type="text" name="n" /> <input type="text" name="n" /> <button type="submit">Compute GCD</button> </form> "#) } #[launch] fn rocket() -> _ { rocket::build().mount("/", routes![index]) }
方案2:返回元组自动设置响应头
无需导入额外包装类型,直接返回(ContentType, 响应体)格式的元组,Rocket会自动将响应的Content-Type头设置为对应值:
use rocket::*; use rocket::http::ContentType; #[get("/")] fn index() -> (ContentType, &'static str) { (ContentType::HTML, r#" <title>GCD Calculator</title> <form action="/gcd" method="post"> <input type="text" name="n" /> <input type="text" name="n" /> <button type="submit">Compute GCD</button> </form> "#) } #[launch] fn rocket() -> _ { rocket::build().mount("/", routes![index]) }
补充说明:如果需要返回动态生成的HTML内容,将返回值里的
&'static str替换为对应生命周期的String类型即可,两种写法均支持动态字符串。
内容的提问来源于stack exchange,提问作者Gaurav Chandrashekar
相关产品推荐
相关产品推荐

