>백엔드 개발 >Golang >Go/Gin에서 미들웨어 체인을 중지할 수 없습니다.

Go/Gin에서 미들웨어 체인을 중지할 수 없습니다.

王林
王林앞으로
2024-02-09 13:15:28530검색

无法停止 Go/Gin 中的中间件链

PHP 세계에서 미들웨어 체인은 요청 처리, 확인 및 승인 수행 등을 수행하는 데 도움이 되는 일반적인 개발 모델입니다. 그러나 Go 웹 프레임워크인 Gin에서는 미들웨어 체인이 약간 다르게 작동합니다. 멈출 수 없는 미들웨어 체인을 사용합니다. 즉, 이전 미들웨어에 오류가 있는지 여부에 관계없이 각 미들웨어가 실행됩니다. 이 디자인은 코드의 복잡성을 증가시키지만 유연성과 사용자 정의 가능성도 향상시킵니다. 이 기사에서는 PHP 편집자 Apple이 작성한 Gin 프레임워크의 미들웨어 체인 작동 원리와 사용법에 대해 자세히 소개합니다.

질문 내용

요청을 진행하기 전에 세션을 확인하고 싶은데 세션을 확인할 수 있는 미들웨어가 있습니다. 이것이 끝점입니다:

으아악

이것은 checksession() 미들웨어이며, 값은 자리 표시자 atm:

입니다. 으아악

로그:

먼저 "/" 路由,该路由重定向到 /profile/:pid 端点,该端点在“无效”会话的情况下重定向到 /sign-in 端点。我被重新路由到 /sign-in 端点,但 /profile/:pid 端点仍然完成执行,即使没有点击 c.next()

를 클릭합니다.

넣어 보았습니다. if-else 块中,以确保仅 c.redirect()c.next() 그 중 하나가 실행되고 있지만 함수는 여전히 통과하고 체인은 멈추지 않습니다.

해결 방법

미들웨어 체인을 수동으로 중단하지 않아서 오류가 발생합니다. c.Redirect() 不会停止中间件链,您应该手动调用 c.Abort() 나머지 핸들러의 실행을 방지합니다.

c.Abort() 도구 팁:

Abort는 보류 중인 핸들러가 호출되는 것을 방지합니다. 현재 핸들러는 중지되지 않습니다. 현재 요청이 승인되었는지 확인하는 승인 미들웨어가 있다고 가정해 보겠습니다. 인증이 실패하는 경우(예: 비밀번호 불일치) Abort를 호출하여 이 요청에 대한 나머지 핸들러가 호출되지 않도록 하세요.

위 내용은 Go/Gin에서 미들웨어 체인을 중지할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제