framework1/framework/core.go

81 lines
1.8 KiB
Go
Raw Permalink Normal View History

2024-10-16 16:53:09 +08:00
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
}