Go Chi 미들웨어 핸들러에서 HTTP 요청 본문 재사용
Go에서 go-chi HTTP 라우터를 사용할 때 다음과 같은 상황이 발생할 수 있습니다. 여러 미들웨어 핸들러에서 요청 본문을 재사용해야 하는 경우. 다음 코드 조각은 이 문제가 발생하는 시나리오를 보여줍니다.
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 }
등록 핸들러는 요청 본문을 읽고 처리하려고 시도합니다. 그러나 이 단계 후에 Create 핸들러가 호출되면 요청 본문이 비어 있기 때문에 요청 본문에서 JSON을 구문 분석하지 못합니다. 이는 외부 핸들러가 요청 본문을 끝까지 읽고 내부 핸들러가 읽을 내용을 남기지 않기 때문에 발생합니다.
이 문제를 해결하려면 외부 핸들러에서 이전에 읽은 데이터를 복원하여 요청 본문을 복원해야 합니다. . 다음 코드 조각은 이를 달성하는 방법을 보여줍니다.
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) }
이 코드에서 bytes.NewReader 함수는 바이트 슬라이스에서 io.Reader를 반환합니다. io.NopCloser 함수는 io.Reader를 r.Body에 필요한 io.ReadCloser로 변환합니다. 요청 본문을 복원하면 후속 핸들러가 해당 내용에 예상대로 액세스하고 처리할 수 있습니다.
위 내용은 Go Chi 미들웨어 핸들러에서 HTTP 요청 본문을 재사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!