|
|
@@ -8,7 +8,8 @@ import (
|
|
|
|
|
|
// 核心框架
|
|
|
type Core struct {
|
|
|
- router map[string]*Tree
|
|
|
+ router map[string]*Tree
|
|
|
+ middlewares []ControllerHandler
|
|
|
}
|
|
|
|
|
|
// 初始化框架核心结构
|
|
|
@@ -24,36 +25,49 @@ func NewCore() *Core {
|
|
|
return &Core{router: router}
|
|
|
}
|
|
|
|
|
|
+func (c *Core) Use(middlewares ...ControllerHandler) {
|
|
|
+ c.middlewares = append(c.middlewares, middlewares...)
|
|
|
+}
|
|
|
+
|
|
|
// 对应 Method = GET
|
|
|
-func (c *Core) Get(url string, handler ControllerHandler) {
|
|
|
- if err := c.router["GET"].AddRouter(url, handler); err != nil {
|
|
|
- log.Fatal("add router error: ", err)
|
|
|
- }
|
|
|
+func (c *Core) Get(url string, handlers ...ControllerHandler) {
|
|
|
+ allHandlers := append(c.middlewares, handlers...)
|
|
|
+ if err := c.router["GET"].AddRouter(url, allHandlers); err != nil {
|
|
|
+ log.Fatal("add router error: ", err)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 对应 Method = POST
|
|
|
-func (c *Core) Post(url string, handler ControllerHandler) {
|
|
|
- if err := c.router["POST"].AddRouter(url, handler); err != nil {
|
|
|
- log.Fatal("add router error: ", err)
|
|
|
- }
|
|
|
+func (c *Core) Post(url string, handlers ...ControllerHandler) {
|
|
|
+ allHandlers := append(c.middlewares, handlers...)
|
|
|
+ if err := c.router["POST"].AddRouter(url, allHandlers); err != nil {
|
|
|
+ log.Fatal("add router error: ", err)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 对应 Method = PUT
|
|
|
-func (c *Core) Put(url string, handler ControllerHandler) {
|
|
|
- if err := c.router["PUT"].AddRouter(url, handler); err != nil {
|
|
|
+func (c *Core) Put(url string, handlers ...ControllerHandler) {
|
|
|
+ allHandlers := append(c.middlewares, handlers...)
|
|
|
+ if err := c.router["PUT"].AddRouter(url, allHandlers); err != nil {
|
|
|
log.Fatal("add router error: ", err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 对应 Method = DELETE
|
|
|
-func (c *Core) Delete(url string, handler ControllerHandler) {
|
|
|
- if err := c.router["DELETE"].AddRouter(url, handler); err != nil {
|
|
|
+func (c *Core) Delete(url string, handlers ...ControllerHandler) {
|
|
|
+ allHandlers := append(c.middlewares, handlers...)
|
|
|
+ if err := c.router["DELETE"].AddRouter(url, allHandlers); err != nil {
|
|
|
log.Fatal("add router error: ", err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// 初始化 Group
|
|
|
+func (c *Core) Group(prefix string) IGroup {
|
|
|
+ return NewGroup(c, prefix)
|
|
|
+}
|
|
|
+
|
|
|
// 匹配路由,如果没有匹配到,返回 nil
|
|
|
-func (c *Core) FindRouteByRequest(request *http.Request) ControllerHandler {
|
|
|
+func (c *Core) FindRouteByRequest(request *http.Request) []ControllerHandler {
|
|
|
// uri 和 method 全部转换为大写, 保证大小写不敏感
|
|
|
uri := request.URL.Path
|
|
|
method := request.Method
|
|
|
@@ -67,28 +81,24 @@ func (c *Core) FindRouteByRequest(request *http.Request) ControllerHandler {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// 初始化 Group
|
|
|
-func (c *Core) Group(prefix string) IGroup {
|
|
|
- return NewGroup(c, prefix)
|
|
|
-}
|
|
|
-
|
|
|
// 框架核心结构实现 handler 接口
|
|
|
func (c *Core) ServeHTTP(response http.ResponseWriter, request *http.Request) {
|
|
|
- log.Println("core.ServeHTTP")
|
|
|
// 封装自定义 context
|
|
|
ctx := NewContext(request, response)
|
|
|
|
|
|
// 寻找路由
|
|
|
- router := c.FindRouteByRequest(request)
|
|
|
- if router == nil {
|
|
|
+ handlers := c.FindRouteByRequest(request)
|
|
|
+ if handlers == nil {
|
|
|
ctx.Json(404, "not found")
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ // 设置 handlers 字段
|
|
|
+ ctx.setHandlers(handlers)
|
|
|
+
|
|
|
// 调用跌幅函数,如果返回 err 代表存在内部错误,返回 500 状态码
|
|
|
- if err := router(ctx); err != nil {
|
|
|
+ if err := ctx.Next(); err != nil {
|
|
|
ctx.Json(500, "inner error")
|
|
|
return
|
|
|
}
|
|
|
- log.Println("core.router")
|
|
|
}
|