ㅋㅋㅋ , 처리 요청 매개변수 등 2. 미들웨어는 코드 구조에서 비즈니스 로직과 처리 요청을 분리하여 코드를 더 명확하고 유지 관리하기 쉽게 만듭니다. 3. 미들웨어를 재사용하여 코드 중복을 줄일 수 있습니다.
미들웨어의 주요 책임은 연결 가능하고 자급자족하는 것입니다. 요청을 처리하는 과정에서 요청을 가로채거나 처리하거나 필터링하며, 요청 처리 전후에 로깅, 인증, 요청 매개변수 처리 등 일부 작업을 수행할 수 있습니다. 미들웨어는 코드 구조에서 비즈니스 로직과 요청 처리를 분리하여 코드를 더 명확하고 유지 관리하기 쉽게 만듭니다. 동시에 미들웨어를 재사용할 수 있어 반복적인 코드 작성 작업량을 줄일 수 있습니다.
코드 예시는 다음과 같습니다.
package main import ( "fmt" "github.com/devfeel/dotweb" ) func main() { app := dotweb.New() // App注册中间件 app.Use(NewSessionAuth()) // 开启SESSION app.HttpServer.SetEnabledSession(true) // 设置路由 输出字符串 Hello Dotweb app.HttpServer.GET("/", func(ctx dotweb.Context) error { method := ctx.Request().Method return ctx.WriteString("Hello Dotweb\n" + "Method:" + method) }) //开启服务 端口号 fmt.Println("dotweb.StartServer => 8080") err := app.StartServer(8080) fmt.Println("dotweb.StartServer error => ", err) } // SessionAuth 结构体 type SessionAuth struct { dotweb.BaseMiddlware } // Handle 处理程序 func (m *SessionAuth) Handle(ctx dotweb.Context) error { fmt.Println("SessionID = ", ctx.SessionID(), " RequestURI = ", ctx.Request().RequestURI) return m.Next(ctx) } // NewSessionAuth New func NewSessionAuth() *SessionAuth { sAuth := new(SessionAuth) return sAu }
Handle은 언제 호출되나요?
BaseMiddlWare의 소스 코드를 살펴보겠습니다:
// BaseMiddleware is the base struct, user defined middleware should extend this type BaseMiddleware struct { next Middleware excludeRouters map[string]struct{} } func (bm *BaseMiddleware) SetNext(m Middleware) { bm.next = m } func (bm *BaseMiddleware) Next(ctx Context) error { httpCtx := ctx.(*HttpContext) if httpCtx.middlewareStep == "" { httpCtx.middlewareStep = middleware_App } if bm.next == nil { if httpCtx.middlewareStep == middleware_App { httpCtx.middlewareStep = middleware_Group if len(httpCtx.RouterNode().GroupMiddlewares()) > 0 { return httpCtx.RouterNode().GroupMiddlewares()[0].Handle(ctx) } } if httpCtx.middlewareStep == middleware_Group { httpCtx.middlewareStep = middleware_Router if len(httpCtx.RouterNode().Middlewares()) > 0 { return httpCtx.RouterNode().Middlewares()[0].Handle(ctx) } } if httpCtx.middlewareStep == middleware_Router { return httpCtx.Handler()(ctx) } } else { // check exclude config if ctx.RouterNode().Node().hasExcludeMiddleware && bm.next.HasExclude() { if bm.next.ExistsExcludeRouter(ctx.RouterNode().Node().fullPath) { return bm.next.Next(ctx) } } return bm.next.Handle(ctx) } return n }
이 코드를 통해 BaseMiddleware는 실제로 연결 목록을 구성하는 노드 미들웨어의 연결 목록이며 그룹 미들웨어와 일반 미들웨어 등 다양한 유형이 있다는 것을 알 수 있습니다. 미들웨어는 ctx의 현재 처리 단계를 기반으로 호출할 미들웨어를 결정하고 최종적으로 ctx의 핸들러를 호출합니다
사용자 정의 미들웨어는 BaseMiddleware
를 상속하고 핸들
func (asm *ApiSignMiddleware) Handle(ctx dotweb.Context) error { if sign := ctx.Request().QueryHeader("Sign"); len(sign) <p>을 구현하여 들어오는 Contex를 분석할 수 있도록 합니다</p><p>. blogserver에서 사용되는 미들웨어를 살펴보겠습니다:</p><p>CrosMiddleware</p><pre class="brush:php;toolbar:false">func (cm *CrosMiddleware) Handle(ctx dotweb.Context) error { if strings.Contains(ctx.Request().RequestURI, "v1") && ctx.Request().Method != "OPTIONS" { if sign := ctx.Request().QueryHeader("Sign"); len(sign) <pre class="brush:php;toolbar:false"> CrosMiddleware 对uri的非参数部分调用checkSign
//验证签名 (requestUri(不含query)+secret) func checkSign(sign, uri string) bool { result := utils.Md5(uri + config.Config().SecretKey) return result == sign }
전달된 헤더의 부호 값은 구성 파일의 uri + SecretKey(md5
)와 일치해야 합니다.
위 내용은 golang 미들웨어의 역할은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

1. AO3 공식 웹 사이트 쿼크 입구를 클릭하여 저장하십시오. 2. AO3 Quark 입구 공식 웹 사이트를 클릭하여 절약하십시오. 【ao3 3 1. AO3 (자체 아카이브)은 팬이 만든 거대한 온라인 아카이브 웹 사이트입니다. 2. 주로 책과 영화에서 TV 시리즈 및 게임에 이르기까지 다양한 미디어를 다루는 팬 공사가 포함되어 있으며 거의 모든 것이 포함됩니다. 3. AO3에는 풍부한 콘텐츠와 다양한 유형이 있으며, 이는 다른 독자의 요구를 충족시킬 수 있습니다.

1. AO3 미러 URL QUARK☜☜☜☜☜☜☜☜을 클릭하려면 클릭하십시오. 2. AO3 미러 주소 쿼크 입구 ☜☜☜☜☜☜☜ 입력하려면 클릭하십시오. 3. AO3 (Archives Own Own)은 2008 년 10 월 29 일에 시작된 비영리 팬 및 팬 픽션 아카이브 웹 사이트입니다. 4. AO3는 팬이 설립하고 팬이 만든 웹 사이트로 팬이 만든 작품을 보호하고 팬 소설 작가에게 검열이없는 환경을 제공하는 데 전념합니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.