Actix-Webミドルウェアでレスポンスを返す
Actix-Webミドルウェアでレスポンスを返却する時に、レスポンスを構成するHttpResponse型を利用し、Result型で返却します。
以下に、Actix-Webのミドルウェアでレスポンスを返却する方法の簡単な例を示します。
use actix_web::{web, App, HttpResponse, HttpServer, middleware, Responder};
async fn middleware_fn(
req: actix_web::dev::ServiceRequest,
srv: actix_web::dev::Service,
) -> Result<actix_web::dev::ServiceResponse, actix_web::Error> {
// 在此处进行中间件逻辑处理
// 构建响应
let response = HttpResponse::Ok()
.content_type("text/plain")
.body("Hello from middleware!");
// 将响应返回
Ok(req.into_response(response.into_body()))
}
async fn index() -> impl Responder {
"Hello World!"
}
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.wrap(middleware::Logger::default())
.wrap_fn(middleware_fn) // 使用wrap_fn将中间件函数包装起来
.route("/", web::get().to(index))
})
.bind("127.0.0.1:8080")?
.run()
.await
}
上記の例では、私たちは中間処理ハンドラーとしてmiddleware_fn関数を定義しました。その関数の中で、私たちは「Hello from middleware!」を返す応答をまとめ、それをResultの型として返します。
注意、wrap_fnメソッドを使用することで、ミドルウェア関数をアプリケーションで使用できるようにラップしています。
ルートパス「/」にアクセスすると、インデックスハンドラー関数がトリガーされ、「Hello World!」をレスポンスとして返します。
任意のパスにアクセスすると、ミドルウェア関数の`middleware_fn`が実行され、レスポンスとして「Hello from middleware!」を返します。
単純な例ですが、ミドルウェア関数でさらに複雑なロジックを実行したり、アプリケーションに適したレスポンスを構築したりできます。