framework1/framework/core.go

81 lines
1.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package framework
import (
"log"
"net/http"
"strings"
)
type Serve struct {
Addr string
//Handler Hander
}
type Core struct {
router map[string]*Tree
}
func NewCore() *Core {
router := map[string]*Tree{}
router["GET"] = NewTree()
router["POST"] = NewTree()
router["PUT"] = NewTree()
router["DELETE"] = NewTree()
return &Core{router: router}
}
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) POST(url string, handler ControllerHandler) {
if err := c.router["POST"].AddRouter(url, handler); err != nil {
log.Fatal("add router error: ", err)
}
}
func (c *Core) PUT(url string, handler ControllerHandler) {
if err := c.router["PUT"].AddRouter(url, handler); err != nil {
log.Fatal("add router error: ", err)
}
}
func (c *Core) DELETE(url string, handler ControllerHandler) {
if err := c.router["DELETE"].AddRouter(url, handler); err != nil {
log.Fatal("add router error: ", err)
}
}
func (c *Core) ServeHTTP(w http.ResponseWriter, r *http.Request) {
log.Println("core.serveHTTP")
ctx := NewContext(r, w)
// 寻找路由
router := c.FindRouteByRequest(r)
if router == nil { // 如果没有找到,这里打印日志
ctx.Json(404, "not found")
return
}
// 调用路由函数如果返回err 代表存在内部错误返回500状态码
if err := router(ctx); err != nil {
ctx.Json(500, "inner error")
return
}
}
func (c *Core) FindRouteByRequest(request *http.Request) ControllerHandler {
uri := request.URL.Path
method := request.Method
upperMethod := strings.ToUpper(method)
upperUri := strings.ToUpper(uri)
if methodHandlers, ok := c.router[upperMethod]; ok {
return methodHandlers.FindHandler(upperUri)
}
return nil
}