Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menggunakan Semula Data Badan Permintaan HTTP Merentasi Pengendali Perisian Tengah Go-chi?

Bagaimana untuk Menggunakan Semula Data Badan Permintaan HTTP Merentasi Pengendali Perisian Tengah Go-chi?

Barbara Streisand
Barbara Streisandasal
2024-12-08 15:24:12284semak imbas

How to Reuse HTTP Request Body Data Across Go-chi Middleware Handlers?

Menggunakan Semula Badan Permintaan HTTP dalam Pengendali Perisian Tengah Go-chi

Apabila menggunakan go-chi untuk penghalaan HTTP, adalah mudah untuk menggunakan semula kod dalam berbilang pengendali. Walau bagaimanapun, ini boleh membawa kepada isu yang tidak dijangka jika pengendali bergantung pada data badan permintaan.

Pertimbangkan senario berikut:

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
}

Dalam contoh ini, kedua-dua pengendali Pendaftaran dan Buat cuba membaca badan permintaan menggunakan ioutil.ReadAll. Walau bagaimanapun, memandangkan Pendaftaran membaca kandungan sehingga penghujungnya, tiada data lagi untuk dibaca apabila Cipta dipanggil.

Untuk menyelesaikan isu ini, pengendali luar (Pendaftaran) mesti memulihkan badan permintaan dengan data dibaca sebelum ini. Ini boleh dicapai menggunakan kod berikut:

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

Di sini, fungsi bytes.NewReader() mengembalikan io.Reader pada kepingan bait, manakala fungsi io.NopCloser menukarkan pembaca ini kepada io. Antara muka ReadCloser diperlukan untuk r.Body. Dengan menetapkan semula r.Body dengan data asal, Create kini boleh mengakses dan menghuraikan kandungan permintaan seperti yang diharapkan.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Semula Data Badan Permintaan HTTP Merentasi 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