Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menggunakan Semula Badan Permintaan HTTP dalam Pengendali Perisian Tengah Go Chi?
Menggunakan Semula Badan Permintaan HTTP dalam Pengendali Perisian Tengah Go Chi
Dalam Go, apabila menggunakan penghala HTTP go-chi, anda mungkin menghadapi situasi di mana anda perlu menggunakan semula badan permintaan dalam berbilang pengendali middleware. Coretan kod berikut menggambarkan senario di mana isu ini timbul:
func Registration(w http.ResponseWriter, r *http.Request) { b, err := ioutil.ReadAll(r.Body) // if you delete this line, the user will be created // ...other code // if all good then create new user user.Create(w, r) } ... func Create(w http.ResponseWriter, r *http.Request) { b, err := ioutil.ReadAll(r.Body) // ...other code // ... there I get the problem with parse JSON from &b }
Pengendali Pendaftaran cuba membaca badan permintaan dan memprosesnya. Walau bagaimanapun, selepas langkah ini, apabila pengendali Cipta dipanggil, ia gagal menghuraikan JSON daripada badan permintaan kerana ia kosong. Ini berlaku kerana pengendali Luar membaca badan permintaan hingga akhir, tidak meninggalkan apa-apa untuk dibaca untuk pengendali dalam.
Untuk menyelesaikan isu ini, badan permintaan mesti dipulihkan dengan memulihkan data yang dibaca lebih awal dalam pengendali luar . Coretan kod berikut menunjukkan cara untuk mencapai ini:
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) }
Dalam kod ini, fungsi bait.NewReader mengembalikan io.Reader pada kepingan bait. Fungsi io.NopCloser, seterusnya, menukar io.Reader kepada io.ReadCloser yang diperlukan untuk r.Body. Dengan memulihkan badan permintaan, pengendali seterusnya boleh mengakses dan memproses kandungannya seperti yang diharapkan.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Semula Badan Permintaan HTTP dalam Pengendali Perisian Tengah Go Chi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!