Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menggunakan Semula Badan Permintaan dalam Pengendali Perisian Tengah HTTP Go-chi?

Bagaimanakah Saya Boleh Menggunakan Semula Badan Permintaan dalam Pengendali Perisian Tengah HTTP Go-chi?

Barbara Streisand
Barbara Streisandasal
2024-12-20 13:32:091023semak imbas

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

Menentukan Kebolehgunaan Badan Permintaan dalam Pengendali Perisian Tengah HTTP

Dalam senario ini, isu timbul apabila cuba menggunakan semula kaedah dalam yang lain dalam Go -chi penghala HTTP. Pengendali luar, Registration(), membaca badan permintaan menggunakan ioutil.ReadAll(r.Body), tidak meninggalkan data yang tersedia untuk pengendali dalam, Create(), untuk menghuraikan JSON daripada.

Penyelesaian : Memulihkan Badan Permintaan

Untuk menyelesaikan isu ini, laksanakan perkara berikut betulkan:

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)
}

Begini cara kod ini menangani masalah:

  • io.ReadAll(r.Body): Membaca keseluruhan permintaan body.
  • io.NopCloser(bytes.NewReader(b)): Memulihkan kandungan permintaan dengan mencipta io.Reader daripada data yang dibaca sebelum ini.
  • r.Body = io.NopCloser(...): Menggantikan r.Body asal dengan yang dipulihkan body.

Dengan cara ini, pengendali dalaman boleh mengakses data JSON daripada badan permintaan tanpa menghadapi ralat "penghujung input JSON yang tidak dijangka".

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Semula Badan Permintaan dalam Pengendali Perisian Tengah HTTP Go-chi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn