Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menggunakan Semula Badan Permintaan HTTP dalam Pengendali Perisian Tengah Go Chi?

Bagaimana untuk Menggunakan Semula Badan Permintaan HTTP dalam Pengendali Perisian Tengah Go Chi?

Barbara Streisand
Barbara Streisandasal
2024-12-05 02:58:08691semak imbas

How to Reuse HTTP Request Bodies in Go Chi Middleware Handlers?

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!

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