mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	
		
			
	
	
		
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package ctx
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"net/http"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type ReqCtx struct {
							 | 
						||
| 
								 | 
							
									Req          *http.Request
							 | 
						||
| 
								 | 
							
									NeedToken    bool          // 是否需要token
							 | 
						||
| 
								 | 
							
									LoginAccount *LoginAccount // 登录账号信息
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// 日志相关信息
							 | 
						||
| 
								 | 
							
									NeedLog     bool        // 是否需要记录日志
							 | 
						||
| 
								 | 
							
									LogResp     bool        // 是否记录返回结果
							 | 
						||
| 
								 | 
							
									Description string      // 请求描述
							 | 
						||
| 
								 | 
							
									ReqParam    interface{} // 请求参数
							 | 
						||
| 
								 | 
							
									RespObj     interface{} // 响应结果
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 请求前置处理器
							 | 
						||
| 
								 | 
							
								type BeforeHandler interface {
							 | 
						||
| 
								 | 
							
									Handler(rc *ReqCtx) error
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 请求后置处理器
							 | 
						||
| 
								 | 
							
								type AfterHandler interface {
							 | 
						||
| 
								 | 
							
									Handler(rc *ReqCtx, err error)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var (
							 | 
						||
| 
								 | 
							
									BeforeHandlers []BeforeHandler
							 | 
						||
| 
								 | 
							
									AfterHandlers  []AfterHandler
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 应用所有请求前置处理器
							 | 
						||
| 
								 | 
							
								func ApplyBeforeHandler(rc *ReqCtx) error {
							 | 
						||
| 
								 | 
							
									for _, e := range BeforeHandlers {
							 | 
						||
| 
								 | 
							
										err := e.Handler(rc)
							 | 
						||
| 
								 | 
							
										if err != nil {
							 | 
						||
| 
								 | 
							
											return err
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 应用所有后置处理器
							 | 
						||
| 
								 | 
							
								func ApplyAfterHandler(rc *ReqCtx, err error) {
							 | 
						||
| 
								 | 
							
									for _, e := range AfterHandlers {
							 | 
						||
| 
								 | 
							
										e.Handler(rc, err)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 新建请求上下文,默认为需要记录日志
							 | 
						||
| 
								 | 
							
								// @param needToken 是否需要token才可访问
							 | 
						||
| 
								 | 
							
								// @param description 请求描述
							 | 
						||
| 
								 | 
							
								func NewReqCtx(needToken bool, description string) *ReqCtx {
							 | 
						||
| 
								 | 
							
									return &ReqCtx{NeedToken: needToken, Description: description, NeedLog: true}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func NewNoLogReqCtx(needToken bool) *ReqCtx {
							 | 
						||
| 
								 | 
							
									return &ReqCtx{NeedToken: needToken, NeedLog: false}
							 | 
						||
| 
								 | 
							
								}
							 |