Documentation
¶
Overview ¶
package web 实现了处理http请求的基本工具
Index ¶
- func CheckResult(m *meta.MethodMetadata) error
- func HttpMethodName(name string) []string
- func HttpResultRouter(resultName string, gen router.RouterExcutorGenerator) []router.Router
- func NewControllerRouter(instance interface{}) router.Router
- func NewCustomControllerRouter(instance interface{}, name string, methodsInfo []RouterMethod) router.Router
- func NewFileRouter(name string, path string) router.Router
- func NewFuncRouter(name string, function interface{}) router.Router
- func NewMutableFuncRouter(name string, function interface{}) router.Router
- func NewRootRouter() router.Router
- func NewSpaceRouter(name string) router.Router
- func NewSpaceRouters(url string) (router.Router, router.Router)
- func NewStaticRouter(name string, path string) router.Router
- type AdvancedExecutor
- type CommonHttpResult
- type ConnectResult
- type Context
- func (this *Context) AddCookie(cookie *http.Cookie)
- func (this *Context) Api(data interface{}) HttpResult
- func (this *Context) Cookie(name string) (*http.Cookie, bool)
- func (this *Context) Data(data []byte) *DataResult
- func (this *Context) File(path string) *FileResult
- func (this *Context) Json(data interface{}) *JsonResult
- func (this *Context) NotFound() *NotFoundResult
- func (this *Context) ParamBool(key string) (bool, error)
- func (this *Context) ParamFile(key string) (*FormFile, error)
- func (this *Context) ParamFiles(key string) ([]*FormFile, error)
- func (this *Context) ParamFloat(key string) (float64, error)
- func (this *Context) ParamInt(key string) (int, error)
- func (this *Context) ParamString(key string) (string, error)
- func (this *Context) ParamStringArray(key string) ([]string, error)
- func (this *Context) PartialView(path string, data ...interface{}) *PartialViewResult
- func (this *Context) Redirect(url string) *RedirectResult
- func (this *Context) RedirectPermanently(url string) *RedirectResult
- func (this *Context) Redispatch(path string) *UserDefinedResult
- func (this *Context) SetValue(name string, value string)
- func (this *Context) ValidateCSRF() bool
- func (this *Context) Value(name string) (string, bool)
- func (this *Context) Values(name string) ([]string, bool)
- func (this *Context) View(path string, data ...interface{}) *ViewResult
- func (this *Context) WriteResult(result Result) error
- func (this *Context) WriteString(value string) error
- func (this *Context) Xml(data interface{}) *XmlResult
- type ContextCVF
- type ContextValueContainer
- type ContextValueFinder
- type ContextValueProvider
- type DataResult
- type DefaultHttpProcessorEvent
- func (this *DefaultHttpProcessorEvent) Error(processor *HttpProcessor, context *Context, err error)
- func (this *DefaultHttpProcessorEvent) Request(processor *HttpProcessor, context *Context) bool
- func (this *DefaultHttpProcessorEvent) RequestFinish(processor *HttpProcessor, context *Context, result []interface{})
- type DeleteResult
- type Error
- type FileExecutor
- type FileResult
- type FormFile
- type FormFileCVF
- type FormFilesCVF
- type GetPostResult
- type GetResult
- type HeadResult
- type HttpConfig
- type HttpMethod
- type HttpProcessor
- func (this *HttpProcessor) Dispatch(segments []string, data interface{})
- func (this *HttpProcessor) RegisterFinder(t reflect.Type, finder ContextValueFinder)
- func (this *HttpProcessor) RegisterMutiTypeFinder(finder ContextValueFinder)
- func (this *HttpProcessor) ResolveSession(context *Context)
- func (this *HttpProcessor) SetDefaultValueContainer(container meta.ValueContainer)
- type HttpProcessorEvent
- type HttpResult
- type JsonResult
- type MutiTypeCVF
- type NotFoundResult
- type OptionsResult
- type ParamTypeFunc
- type PartialViewResult
- type PostResult
- type PutResult
- type RedirectResult
- type Result
- type RouterMethod
- type SimpleExecutor
- type SimpleExecutorFunc
- type StaticExecutor
- type StatusCode
- type TemplateCSRF
- type TemplateSession
- func (this *TemplateSession) Bool(key string) bool
- func (this *TemplateSession) Contains(key string) bool
- func (this *TemplateSession) Float(key string) float64
- func (this *TemplateSession) Int(key string) int
- func (this *TemplateSession) String(key string) string
- func (this *TemplateSession) Value(key string) interface{}
- type TimeCVF
- type TraceResult
- type UserDefinedResult
- type ValueCVF
- type ViewData
- type ViewResult
- type WebApp
- type XmlResult
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CheckResult ¶
func CheckResult(m *meta.MethodMetadata) error
CheckResult 检查元数据的第一个返回值是否符合web.Result接口
func HttpMethodName ¶
HttpMethod 提取name中包含的Http方法名,如果不包含任何方法名,则返回Post
func HttpResultRouter ¶
func HttpResultRouter(resultName string, gen router.RouterExcutorGenerator) []router.Router
HttpResultRouter 生成Http方法名路由
func NewControllerRouter ¶
NewControllerRouter 创建控制器路由,根据方法返回值确定该方法处理哪种形式的http请求
instance:控制器对象 控制器方法必须满足如下格式: func (this *SomeController) Method(param *ParamStruct) web.Result this:必须是控制器指针 param:可以没有或者有多个,如果有则类型必须为结构体指针类型 第一个返回结果最好是能够赋值给web.Result接口,也可以是其他类型 return:执行成功则返回控制器的router.Router
func NewCustomControllerRouter ¶
func NewCustomControllerRouter(instance interface{}, name string, methodsInfo []RouterMethod) router.Router
NewCustomControllerRouter 创建定制化控制器路由
instance:控制器对象 name:控制器路由名称,为空时使用instance类名(不含Controller) methodsInfo:路由方法信息数组,RouterName为空时使用方法名 return:执行成功则返回控制器的router.Router
func NewFileRouter ¶
NewFileRouter 创建文件路由,只能匹配Get类型的文件请求,返回指定的文件
name:路由名称 path:文件路径 return:执行成功则返回router.Router
func NewFuncRouter ¶
NewFuncRouter 创建函数路由,根据方法返回值确定该方法处理哪种形式的http请求
name:路由名称 function:函数 函数必须满足如下格式: func Method(param *ParamStruct) web.Result param:可以没有或者有多个,如果有则类型必须为结构体指针类型 第一个返回结果最好是能够赋值给web.Result接口,也可以是其他类型 return:执行成功则返回router.Router
func NewMutableFuncRouter ¶
NewMutableFuncRouter 创建函数路由,可匹配无限层级和任意http方法的请求
name:路由名称 function:函数 函数必须满足如下格式: func Method(param *ParamStruct) web.Result param:可以没有或者有多个,如果有则类型必须为结构体指针类型 第一个返回结果最好是能够赋值给web.Result接口,也可以是其他类型 return:执行成功则返回router.Router
Types ¶
type AdvancedExecutor ¶
type AdvancedExecutor struct { router.BaseRouterExecutor Method *meta.MethodMetadata //执行方法 }
高级执行器
func NewAdvancedExecutor ¶
func NewAdvancedExecutor(method *meta.MethodMetadata) *AdvancedExecutor
NewAdvancedExecutor 创建高级执行器
func (*AdvancedExecutor) Execute ¶
func (this *AdvancedExecutor) Execute() (interface{}, error)
Excute 执行
type CommonHttpResult ¶
type CommonHttpResult struct { Status StatusCode //状态码 ContentType string //内容类型 }
公共http结果
func (*CommonHttpResult) SetHeader ¶
func (this *CommonHttpResult) SetHeader(writer io.Writer) (http.ResponseWriter, error)
SetHeader 设置响应头信息
func (*CommonHttpResult) WriteHeader ¶
func (this *CommonHttpResult) WriteHeader(writer http.ResponseWriter)
WriteHeader 写入响应头信息,对于
type Context ¶
type Context struct { router.BaseContext HttpContext *connector.HttpContext //http上下文 Session session.Session //http会话 CSRF session.Session //csrf会话 End router.Router //处理当前上下文的路由 Processor *HttpProcessor //生成当前上下文的处理器 }
func NewContext ¶
func NewContext(segments []string, context *connector.HttpContext, processor *HttpProcessor) (*Context, error)
NewContext 创建上下文信息
func (*Context) ParamFiles ¶
ParamFiles 获取http参数文件数组
func (*Context) ParamFloat ¶
ParamFloat 获取http参数Float
func (*Context) ParamString ¶
ParamString 获取http参数字符串
func (*Context) ParamStringArray ¶
ParamStringArray 获取http参数字符串数组
func (*Context) PartialView ¶
func (this *Context) PartialView(path string, data ...interface{}) *PartialViewResult
PartialView 返回部分视图类型结果
func (*Context) Redirect ¶
func (this *Context) Redirect(url string) *RedirectResult
Redirect 返回临时重定向类型结果
func (*Context) RedirectPermanently ¶
func (this *Context) RedirectPermanently(url string) *RedirectResult
RedirectPermanently 返回永久重定向类型结果
func (*Context) Redispatch ¶
func (this *Context) Redispatch(path string) *UserDefinedResult
Redispatch 重新分发,将当前请求交给另一个path处理
func (*Context) ValidateCSRF ¶
ValidateCSRF 验证表单请求中是否存在csrf的token并且该token有效,验证后token立即失效
func (*Context) View ¶
func (this *Context) View(path string, data ...interface{}) *ViewResult
View 返回视图类型结果
func (*Context) WriteResult ¶
WriteResult 将Result写入http response流
func (*Context) WriteString ¶
WriteString 将字符串写入http response流
type ContextCVF ¶
type ContextCVF struct { }
*web.Context
type ContextValueContainer ¶
type ContextValueContainer struct {
Context *Context
}
http上下文值容器 优先级:web.Processor.Finders > web.Processor.MutiTypeFinders > web.Processor.ValueContainer
func NewContextValueContainer ¶
func NewContextValueContainer(context *Context) *ContextValueContainer
NewContextValueContainer 创建http上下文值容器
func (*ContextValueContainer) Contains ¶
func (this *ContextValueContainer) Contains(name string, t reflect.Type) (meta.ValueProvider, bool)
String 根据名称和类型返回相应的字符串值,返回的bool表示该值是否存在
type ContextValueFinder ¶
type ContextValueFinder interface { // Contains 查找context是否包含指定的值 Contains(context *Context, name string, t reflect.Type) bool // String 查找context中指定的字符串值 String(context *Context, name string, t reflect.Type) []string // Value 生成指定类型的值 Value(context *Context, name string, t reflect.Type) interface{} }
http上下文值查找器
type ContextValueProvider ¶
type ContextValueProvider struct { Context *Context Finder ContextValueFinder Name string Type reflect.Type }
http上下文值提供器
func (*ContextValueProvider) String ¶
func (this *ContextValueProvider) String() []string
String 根据名称和类型返回相应的字符串值
func (*ContextValueProvider) Value ¶
func (this *ContextValueProvider) Value() interface{}
Value 根据名称和类型生成相应类型的数据
type DefaultHttpProcessorEvent ¶
type DefaultHttpProcessorEvent struct { }
默认事件
func (*DefaultHttpProcessorEvent) Error ¶
func (this *DefaultHttpProcessorEvent) Error(processor *HttpProcessor, context *Context, err error)
Error 出现错误时触发
func (*DefaultHttpProcessorEvent) Request ¶
func (this *DefaultHttpProcessorEvent) Request(processor *HttpProcessor, context *Context) bool
Request 每次出现一个新请求的时候触发,返回值决定是否处理该请求
func (*DefaultHttpProcessorEvent) RequestFinish ¶
func (this *DefaultHttpProcessorEvent) RequestFinish(processor *HttpProcessor, context *Context, result []interface{})
RequestFinish 每次请求执行完成的时候触发
type Error ¶
type Error string
错误信息
const ( ErrorNotStructPtr Error = "ErrorNotStructPtr(W10030):(%s)不是结构体指针类型" ErrorNoSpecificMethod Error = "ErrorNoSpecificMethod(W10031):控制器(%s)不存在指定的方法(%s)" ErrorFirstReturnMustBeResult Error = "ErrorFirstReturnMustBeResult(W10040):第一个返回值类型(%s)不符合web.Result接口" ErrorNoReturn Error = "ErrorNoReturn(W10041):函数(%s)至少拥有一个返回值并且第一个返回值必须符合web.Result类型" ErrorParamNotExist Error = "ErrorParamNotExist(W10100):参数(%s)不存在" ErrorRouterNotFound Error = "ErrorRouterNotFound(W10110):路由(%s)不存在" ErrorInvalidContext Error = "ErrorInvalidContext(W10120):无效的上下文(%s),无法转换为web.Context" ErrorInvalidWriter Error = "ErrorInvalidWriter(W10200):无效的http写入器" ErrorInvalidPartialView Error = "ErrorInvalidPartialView(W10300):无效的部分视图(%s),找不到指定名称(%s)的模板" ErrorInvalidKey Error = "ErrorInvalidKey(W10400):无效的Key(%s)" ErrorParamMustBeFunc Error = "ErrorParamMustBeFunc(W10500):参数必须是函数" )
错误码
type FileExecutor ¶
type FileExecutor struct { router.BaseRouterExecutor // contains filtered or unexported fields }
文件执行器,用于返回特定文件
type FileResult ¶
type FileResult struct { CommonHttpResult Context *Context //请求上下文 FilePath string //本地文件路径 }
文件结果
type FormFileCVF ¶
type FormFileCVF struct { }
*web.FormFile
type HttpConfig ¶
type HttpConfig struct { Config config.Config //配置信息 Root string //应用根目录 App string //应用名称 Https bool //是否启用https,可选,默认为false Port int //监听端口,可选,默认为80,https为true则默认为443 Cert string //证书(PEM)路径,如果启用了https则必填 PrivateKey string //私钥(PEM)路径,如果启用了https则必填 Home string //首页地址 Session bool //是否启用session SessionType string //session类型,参考tinygo/session,默认为memory SessionSource string //session源,参考tinygo/session,默认为空 SessionExpire int //session过期时间,单位为秒 SessionCookieName string //Session Cookie名 SessionCookieExpire int //Session Cookie的过期时间,单位为秒,默认为0(0表示浏览器关闭后过期) CSRF bool //是否启用csrf CSRFType string //session类型,参考tinygo/session,默认为memory CSRFSource string //session源,参考tinygo/session,默认为空 CSRFExpire int //csrf token过期时间,单位为秒 CSRFCookieName string //csrf Cookie 名 CSRFTokenName string //csrf 表单名 CSRFCookieExpire int //csrf Cookie的过期时间,单位为秒,默认为0(0表示浏览器关闭后过期) Static []string //静态文件目录,默认为"content" List bool //静态文件目录是否允许显示目录列表,默认为false View string //视图文件目录,默认为"views" Precompile bool //是否预编译视图,默认为false Api string //使用Api返回的数据的解析格式,默认为auto(其他设置包括json,xml) Favicon string //网站图标路径 Robots string //爬虫协议文件路径 Log bool //是否启用日志 LogType string //日志类型,可以为console或file LogPath string //日志路径,日志类型为file的时候需要 LogAsync bool //异步日志,默认为false LayoutConfigPath string //布局配置文件名 TemplateExt string //视图文件扩展名 TemplateName string //模板文件内部分模板名,用于返回部分视图时使用 MaxRequestMemory int //单次请求最大占用内存大小,默认32 MB TemplateConfig *template.TemplateConfig //视图模板配置 }
Http配置
func ReadHttpConfig ¶
func ReadHttpConfig(appDir string, configPath string) (*HttpConfig, error)
ReadHttpConfig 读取配置文件
type HttpMethod ¶
type HttpMethod string
Http方法
const ( HttpMethodGet HttpMethod = "Get" // Get方法 HttpMethodPost HttpMethod = "Post" // Post方法 HttpMethodPut HttpMethod = "Put" // Put方法 HttpMethodDelete HttpMethod = "Delete" // Delete方法 HttpMethodOptions HttpMethod = "Options" // Options方法 HttpMethodHead HttpMethod = "Head" // Head方法 HttpMethodTrace HttpMethod = "Trace" // Trace方法 HttpMethodConnect HttpMethod = "Connect" // Connect方法 )
type HttpProcessor ¶
type HttpProcessor struct { Root router.Router //根路由 Config *HttpConfig //http配置 Logger log.Logger //日志记录 SessionContainer session.SessionContainer //Session容器 CSRFContainer session.SessionContainer //Csrf容器 Finders map[string]ContextValueFinder //Context单类型值查找器 MutiTypeFinders []ContextValueFinder //Context多类型值查找器 DefaultValueContainer meta.ValueContainer //web执行器默认使用的值容器 Templates *template.ViewTemplates //视图模板信息 Event HttpProcessorEvent //处理器事件 }
HttpProcessor 用于协调http连接器和路由,并管理Http应用的所有内容
func NewHttpProcessor ¶
func NewHttpProcessor(root router.Router, config *HttpConfig) (*HttpProcessor, error)
NewHttpProcessor 创建Http处理器
func (*HttpProcessor) Dispatch ¶
func (this *HttpProcessor) Dispatch(segments []string, data interface{})
Dispatch 将接收到的请求进行分发
segments:用于进行分发的路径段信息 data:连接携带的数据
func (*HttpProcessor) RegisterFinder ¶
func (this *HttpProcessor) RegisterFinder(t reflect.Type, finder ContextValueFinder)
RegisterFinder 注册单一类型的值查找器
func (*HttpProcessor) RegisterMutiTypeFinder ¶
func (this *HttpProcessor) RegisterMutiTypeFinder(finder ContextValueFinder)
RegisterMutiTypeFinder 注册多类型的值查找器
func (*HttpProcessor) ResolveSession ¶
func (this *HttpProcessor) ResolveSession(context *Context)
ResolveSession 处理会话相关内容
func (*HttpProcessor) SetDefaultValueContainer ¶
func (this *HttpProcessor) SetDefaultValueContainer(container meta.ValueContainer)
SetDefaultValueContainer 设置默认的值容器
type HttpProcessorEvent ¶
type HttpProcessorEvent interface { // Request 每次出现一个新请求的时候触发,返回值决定是否处理该请求 Request(processor *HttpProcessor, context *Context) bool // RequestFinish 每次请求正确执行完成的时候触发 RequestFinish(processor *HttpProcessor, context *Context, result []interface{}) // Error 请求过程中出现任何错误时触发,出现错误时context需要检查是否为nil后才能使用 Error(processor *HttpProcessor, context *Context, err error) }
HttpProcessor事件接口
type HttpResult ¶
type HttpResult interface { // Code 返回状态码 Code() StatusCode // Message 返回状态信息 Message() string // 实现Result接口 Result }
用于http的结果
type MutiTypeCVF ¶
type MutiTypeCVF struct { }
多类型值查找器
type NotFoundResult ¶
type NotFoundResult struct { CommonHttpResult Context *Context //请求上下文 }
404结果
type ParamTypeFunc ¶
参数类型方法
type PartialViewResult ¶
type PartialViewResult struct { CommonHttpResult Templates *template.ViewTemplates Path string Data interface{} }
部分视图结果
type RedirectResult ¶
type RedirectResult struct { CommonHttpResult Context *Context //请求上下文 Url string //重定向地址 }
重定向结果
type RouterMethod ¶
type RouterMethod struct { MethodName string //控制器方法名称 RouterName string //路由名称 HttpMethod HttpMethod //Http方法名称 }
路由方法信息
type SimpleExecutor ¶
type SimpleExecutor struct { router.BaseRouterExecutor // contains filtered or unexported fields }
简单执行器
func NewSimpleExecutor ¶
func NewSimpleExecutor(f SimpleExecutorFunc) *SimpleExecutor
NewSimpleExecutor 创建简单执行器
func (*SimpleExecutor) Execute ¶
func (this *SimpleExecutor) Execute() (interface{}, error)
Excute 执行
type StaticExecutor ¶
type StaticExecutor struct { router.BaseRouterExecutor // contains filtered or unexported fields }
静态文件执行器
func NewStaticExecutor ¶
func NewStaticExecutor(path string) *StaticExecutor
NewStaticExecutor 创建静态文件执行器
func (*StaticExecutor) Execute ¶
func (this *StaticExecutor) Execute() (interface{}, error)
Excute 执行
type StatusCode ¶
type StatusCode int
服务端状态码
const ( //Http状态码 StatusCodeOK StatusCode = 200 //http正常返回结果 StatusCodeMovedPermanently StatusCode = 301 //http永久转移 StatusCodeMovedTemporarily StatusCode = 302 //http临时转移 StatusCodeNotFound StatusCode = 404 //http页面未找到 //框架内部状态码(功能) StatusCodeRedispatch StatusCode = iota + 10000 //路由重新分发状态,接收该状态后需要将当前请求重新分发 //框架内部状态码(错误) StatusCodeParamNotCorrect //http参数不正确 StatusCodePageNotFound //路由未找到 //用户自定义状态码 StatusCodeUserDefined StatusCode = 1000000 //用户自定义状态码起始码 )
type TemplateCSRF ¶
type TemplateCSRF struct {
// contains filtered or unexported fields
}
模板CSRF信息
func NewTemplateCSRF ¶
func NewTemplateCSRF(sess session.Session, fieldName string) *TemplateCSRF
NewTemplateCSRF 创建一个模板CSRF
type TemplateSession ¶
type TemplateSession struct {
// contains filtered or unexported fields
}
模板会话信息
func NewTemplateSession ¶
func NewTemplateSession(sess session.Session) *TemplateSession
NewTemplateSession 创建一个模板Session
func (*TemplateSession) Contains ¶
func (this *TemplateSession) Contains(key string) bool
Contains 确认Session中是否包含该key
func (*TemplateSession) String ¶
func (this *TemplateSession) String(key string) string
String 获取字符串
func (*TemplateSession) Value ¶
func (this *TemplateSession) Value(key string) interface{}
Value 获取值
type UserDefinedResult ¶
type UserDefinedResult struct { Status StatusCode //状态码 Msg string //消息 }
自定义返回结果
func NewUserDefinedResult ¶
func NewUserDefinedResult(code StatusCode, msg string) *UserDefinedResult
NewUserDefinedResult 创建自定义的返回结果
type ValueCVF ¶
type ValueCVF struct { }
ValueCVF 单值查找器
type ViewResult ¶
type ViewResult struct { CommonHttpResult Templates *template.ViewTemplates Path string Data interface{} }
视图结果