POST ボディをコンソールに出力し、リクエスト オブジェクトからの現在の URL を含む HTTP レスポンスを作成することで、POST リクエストに応答する Actix Web ハンドラが必要です。
リクエストの POST ボディを読むとき、先物が関与する必要があるようです。私がこれまでに得た最も近いものは次のとおりです。
fn handler(req: HttpRequest) -> FutureResponse<HttpResponse> {
req.body()
.from_err()
.and_then(|bytes: Bytes| {
println!("Body: {:?}", bytes);
let url = format!("{scheme}://{host}",
scheme = req.connection_info().scheme(),
host = req.connection_info().host());
Ok(HttpResponse::Ok().body(url).into())
}).responder()
}
future はハンドラーよりも長生きするため、これはコンパイルされません。したがって、読み取りの試みreq.connection_info()
は違法です。コンパイラ エラーは、move
キーワードをクロージャ定義に使用することを示唆しています.and_then(move |bytes: Bytes| {
。これもコンパイルされません。これはreq
、req.body()
呼び出し時に移動され、移動後に参照の構築中にキャプチャされるためurl
です。
connection_info
POST ボディへのアクセスと同時に、リクエスト オブジェクト (例: ) に添付されたデータにアクセスできるスコープを構築する合理的な方法は何ですか?