From 602592a354de60ba8bcee5ccebfe21cfbe92148f Mon Sep 17 00:00:00 2001 From: John Date: Sun, 13 Jan 2019 17:02:32 +0800 Subject: [PATCH] TODO-- --- TODO.MD | 5 +++-- geg/other/test.go | 45 ++++++++++++++++++++++++++++++++------------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/TODO.MD b/TODO.MD index fa16318a6..3514d4f01 100644 --- a/TODO.MD +++ b/TODO.MD @@ -44,8 +44,6 @@ 1. WebServer增加可选择的路由覆盖配置,默认情况下不覆盖; 1. gkafka这个包比较重,未来从框架中剥离出来; 1. grpool性能压测结果变慢的问题; -1. 改进证书打开失败时的WebServer错误提示,前置HOOK校验后关闭后续的HOOK逻辑执行; -1. 目前WebServer的HOOK是按照优先级执行的,需要增加覆盖特性; 1. 增加jumplist的数据结构容器; 1. DelayQueue/PriorityQueue; @@ -105,3 +103,6 @@ 1. 改进gfpool在文件指针变化时的更新; 1. ghttp hook回调使用方式在注册路由比较多的时候,优先级可能使得开发者混乱,考虑方式便于管理; 1. gform对于MySQL字段类型为datetime类型的时区问题分析; +1. 改进证书打开失败时的WebServer错误提示,前置HOOK校验后关闭后续的HOOK逻辑执行; +1. 目前WebServer的HOOK是按照优先级执行的,需要增加覆盖特性; + diff --git a/geg/other/test.go b/geg/other/test.go index a70f09dcc..193c20e27 100644 --- a/geg/other/test.go +++ b/geg/other/test.go @@ -1,19 +1,38 @@ package main -import "fmt" +import ( + "fmt" + "net/http" -func test() (err interface{}) { - defer func() { - err = recover() - }() - panic(1) - return + "gitee.com/johng/gf/g" + "gitee.com/johng/gf/g/net/ghttp" +) + +type Test struct { + Name string +} + +func Handler(r *ghttp.Request) { + fmt.Println("==========") + fmt.Println("/v1/*", r.Request.Method) + if r.Request.Method == "OPTIONS" { // 临时解决方法,但并不完美。而且请求时还是会报错但返回是正常的。 + return // 注释掉这行就会跨域失败 + } + r.Response.WriteJson(Test{Name: "hello"}) + r.Response.WriteHeader(http.StatusOK) } func main() { - - switch err := test(); err { - default: - fmt.Println(err) - } -} + s := g.Server() + s.BindHookHandler("/*any", ghttp.HOOK_BEFORE_SERVE, func(r *ghttp.Request) { + fmt.Println("/*any", r.Request.Method) + r.Response.SetAllowCrossDomainRequest("*", "PUT,GET,POST,DELETE,OPTIONS") + r.Response.Header().Set("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, token") + if r.Request.Method == "OPTIONS" { // 复杂请求的预处理 + r.Response.WriteHeader(202) + } + }) + s.Group("/v1").ALL("*", Handler, ghttp.HOOK_BEFORE_SERVE) + s.SetPort(6789) + s.Run() +} \ No newline at end of file