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

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

Barbara Streisand
Lepaskan: 2024-12-04 16:54:15
asal
468 orang telah melayarinya

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

Kebolehgunaan Semula Badan Permintaan HTTP dalam Perisian Tengah Go-chi

Apabila bekerja dengan Go-chi untuk penghalaan HTTP, selalunya perlu menggunakan semula badan permintaan merentas berbilang pengendali. Walau bagaimanapun, cabaran biasa timbul apabila badan permintaan hanya boleh dibaca sekali.

Sebagai contoh, pertimbangkan kod berikut:

func Registration(w http.ResponseWriter, r *http.Request) {
    b, err := ioutil.ReadAll(r.Body) // read request body
    // ...other code
    user.Create(w, r)
}

...

func Create(w http.ResponseWriter, r *http.Request) {
  b, err := ioutil.ReadAll(r.Body)  
  // ...other code
}
Salin selepas log masuk

Dalam contoh ini, pengendali Pendaftaran membaca badan permintaan menggunakan ioutil.ReadAll. Apabila pengendali Cipta digunakan, ia cuba membaca semula kandungan, mengakibatkan ralat input JSON yang tidak dijangka.

Masalah asas di sini ialah panggilan pertama ke ReadAll meletihkan badan permintaan. Untuk menyelesaikan isu ini, badan permintaan mesti dipulihkan dengan data yang dibaca sebelum ini. Kod berikut menunjukkan cara:

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)
}
Salin selepas log masuk

Dalam kod yang disemak ini, io.ReadAll digunakan untuk membaca badan permintaan, dan kemudian badan permintaan dipulihkan dengan bait.NewReader dan io.NopCloser berfungsi sebelum memanggil pengguna.Buat. Ini dengan berkesan menjadikan badan permintaan tersedia untuk pengendali seterusnya.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan