ホームページ > バックエンド開発 > Golang > Go-chi HTTP ミドルウェア ハンドラーでリクエスト ボディを再利用するにはどうすればよいですか?

Go-chi HTTP ミドルウェア ハンドラーでリクエスト ボディを再利用するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-20 13:32:09
オリジナル
980 人が閲覧しました

How Can I Reuse Request Bodies in Go-chi HTTP Middleware Handlers?

HTTP ミドルウェア ハンドラーでのリクエスト本文の再利用性の決定

このシナリオでは、Go 内の別のメソッド内でメソッドを再利用しようとすると問題が発生します。 -chi HTTP ルーター。外部ハンドラー Registration() は、ioutil.ReadAll(r.Body) を使用してリクエスト本文を読み取り、内部ハンドラー Create() が JSON を解析できるデータを残しません。

: リクエストボディの復元

この問題を解決するには、次の手順を実装します。修正:

func Registration(w http.ResponseWriter, r *http.Request) {
    b, err := io.ReadAll(r.Body) 
    // ...other code
    r.Body = io.NopCloser(bytes.NewReader(b))
    user.Create(w, r)
}
ログイン後にコピー

このコードが問題を解決する方法は次のとおりです:

  • io.ReadAll(r.Body): リクエスト全体を読み取りますbody.
  • io.NopCloser(bytes.NewReader(b)): 以前に読み取られたデータから io.Reader を作成して、リクエスト本文を復元します。
  • r.Body = io.NopCloser(...): 元の r.Body を復元されたものに置き換えます。 body.

このようにして、内部ハンドラーは、「JSON 入力の予期しない終了」エラーが発生することなく、リクエスト本文から JSON データにアクセスできます。

以上がGo-chi HTTP ミドルウェア ハンドラーでリクエスト ボディを再利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート