3

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| {。これもコンパイルされません。これはreqreq.body()呼び出し時に移動され、移動後に参照の構築中にキャプチャされるためurlです。

connection_infoPOST ボディへのアクセスと同時に、リクエスト オブジェクト (例: ) に添付されたデータにアクセスできるスコープを構築する合理的な方法は何ですか?

4

1 に答える 1