目录
axum::handler
模块
什么是Handler
可用于处理请求的异步函数。
在axum中,处理程序是一个异步函数,它接受零个或多个提取器作为参数, 并返回可以转换为响应的内容。
处 理程序是应用程序逻辑所在的地方, axum应用程序是通过处理程序之间的路由构建的。
即是说,处理程序是axum应用程序的核心, 路由是程序的入口,整个axum应用程序是由路由和处理程序组成的。
一些handlers的示例
use axum::{body::Bytes, http::StatusCode};
// 立即返回空的`200 OK`响应
async fn unit_handler() {}
// 立即返回空的`200 OK`响应并附带纯文本主体的处理程序。
async fn string_handler() -> String {
"Hello, World!".to_string()
}
// 处理程序将缓冲请求正文并返回它。
// 这是因为 `Bytes` 实现了 `FromRequest`,所以可以用作提取器。
// `String` 和 `StatusCode` 都实现了 `IntoResponse`,因此 `Result<String, StatusCode>` 也实现了 `IntoResponse`
aysnc fn echo(body: Bytes) -> Result<String, StatusCode> {
if let Ok(string) = String::from_utf8(body.to_vec()) {
Ok(string)
} else {
Err(StatusCode::BAD_REQUEST)
}
}
与其直接使用 StatusCode
,使用最终可以转换为 Response
的中间错误类型更合理。
这样可以在处理程序中使用 ?
运算符。
看看这些示例:
anyhow-error-response
用于通用的包装错误error-handling
用于应用程序特定的详细错误
处理处理程序类型错误
要将函数用作处理程序,它必须实现 Handler 特性。
axum 为具有以下功能提供了概括实现:
-
是
async fn
s。 -
最多不超过
16
个参数,所有参数都实现Send
。