跳转到内容

路由器

路由器是 Fox 的核心组件,处理请求路由和中间件。

创建一个没有任何中间件的新路由器:

r := fox.New()

创建一个带有默认中间件的路由器:响应时间头、请求日志和 Recovery。

r := fox.Default()
r.GET("/path", handler)
r.POST("/path", handler)
r.PUT("/path", handler)
r.DELETE("/path", handler)
r.PATCH("/path", handler)
r.HEAD("/path", handler)
r.OPTIONS("/path", handler)

创建具有共享前缀和中间件的路由组:

api := r.Group("/api")
api.Use(authMiddleware())
{
api.GET("/users", listUsers)
api.POST("/users", createUser)
}
v1 := api.Group("/v1")
{
v1.GET("/products", listProducts)
}

Fox 路由处理器支持这些签名:

func()
func(ctx *fox.Context) T
func(ctx *fox.Context) (T, error)
func(ctx *fox.Context, req Request) T
func(ctx *fox.Context, req *Request) (T, error)

如果有入参,第一个参数必须是 *fox.Context。第二个参数可以是结构体、结构体指针、map 或 interface,Fox 会从请求中自动绑定。

基于域名的路由:

de := fox.NewDomainEngine()
// 精确域名
de.Domain("api.example.com", func(api *fox.Engine) {
api.GET("/users", handler)
})
// 正则域名
de.DomainRegexp(`^([a-z]+)\.example\.com$`, func(app *fox.Engine) {
app.GET("/", handler)
})
// 回退路由注册在 DomainEngine 自身
de.GET("/health", func() string {
return "OK"
})
// 全局中间件
r.Use(middleware1(), middleware2())
// 组中间件
api := r.Group("/api")
api.Use(authMiddleware())
// 日志中间件
r.Use(fox.Logger())
// 响应时间头中间件
r.Use(fox.NewXResponseTimer())
// Recovery 中间件
r.Use(fox.Recovery())
r.Run(":8080")
r.RunTLS(":8443", "cert.pem", "key.pem")
server := &http.Server{
Addr: ":8080",
Handler: r,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
}
server.ListenAndServe()

fox.New() 不接收 option 参数。请直接配置嵌入的 Gin engine 和 Fox 字段:

r := fox.New()
r.MaxMultipartMemory = 32 << 20
r.SetTrustedProxies([]string{"127.0.0.1"})
r.DefaultRenderErrorStatusCode = http.StatusUnprocessableEntity