内置中间件

异常恢复

一般只在未知输入和不可靠请求时使用

r.Use(znet.Recovery(func(c *znet.Context, err error) {
		zlog.Error("Recovery", err)
}))

定义错误返回

r.Use(znet.RewriteErrorHandler(func(c *znet.Context, err error) {
		c.String(500, err.Error())
}))

// 用于在处理路由里返回错误的请求
r.Any("/", func() (string, error) {
		return "", errors.New("非法请求")
})

超时控制

请求超过指定时长直接返回504或自定义返回信息

import "github.com/sohaha/zlsgo/znet/timeout"

// 默认超时返回的 HTTP 状态码为:504

// 后面全部路由都5秒后超时
r.Use(timeout.New(5 * time.Second))

// 单独一个请求设置超时5秒后超时
r.GET("/timeout_1", timeout.New(5), func(c *znet.Context) {
		c.String(200, "Hello world")
})

// 自定义返回内容
r.GET("/timeout_2", timeout.New(5,func(c *znet.Context) {
		c.String(200, "Has timed out")
}), func(c *znet.Context) {
		c.String(200, "Hello world")
})

跨域请求

import "github.com/sohaha/zlsgo/znet/cors"

r.Use(cors.Default())

// 如需指定域名
r.Use(cors.New(&cors.Config{
  // 支持模糊匹配,下面表示支持 <https://qq.com> 与 (任意字符)://w(任意一个字符).qq.com
  Domains: []string{"<https://qq.com>","*://w?.qq.com"},
  Methods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
  Headers: []string{"X-Requested-With"},
  CustomHandler: func(conf *cors.Config, c *znet.Context){},
})

Gzip 压缩

import "github.com/sohaha/zlsgo/znet/gzip"

// 直接使用默认配置
r.Use(gzip.Default())

// 自定义选项
r.Use(gzip.New(gzip.Config{
		CompressionLevel: 7,
		PoolMaxSize:      200,
		MinContentLength: 1024,
}))

brotli 压缩