fiber实例的用法
fiber 实例是由 fiber 包中的 New()方法创建的,一般称之为 App 实例
App 实例拥有多种方法,主要用于设置路由
App 实例的方法有:
Static :静态文件,如images,CSS,和js Route Handlers:注册绑定路由 Mount :挂载 Fiber 实例 Group :创建群组路由 Server :返回底层 fasthttp Server Stack :返回原始路由器堆栈 Config :返回App Config值 (只读) Handler :返回可用于服务自定义 * fasthttp.RequestCtx 请求的服务器处理程序 Listen :收听来自给定地址的 HTTP 请求 ListenTLS :收听来自给定地址的 HTTPS 请求
Static
使用 Static 方法来服务静态文件,例如 images,CSS, 和 JavaScript
默认情况下,Static 将在响应目录上的请求时提供 index.html 文件
func (app *App) Static(prefix, root string, config ...Static) Router
app.Static("/", "./public")
访问根路由时会提供public目录中的文件
app.Static("/static", "./public")
访问/static的路由会提供public目录中的文件
Static是一个fiber包下的结构体,用于自定义控制静态文件的设置
fiber.Static{
//默认False,为true时,服务器尝试通过缓存压缩文件最小化CPU使用率。
Compress bool `json:"compress"`
//默认False,为true时,启用字节范围请求。
ByteRange bool `json:"byte_range"`
//默认False,为true时,启用目录浏览。
Browse bool `json:"browse"`
// 默认False,为true时,启用直接下载
Download bool `json:"download"`
//默认“index.html”,用于指定目录的默认服务文件名。
Index string `json:"index"`
//非活动文件处理程序的失效持续时间。
//默认10 * time.second
//使用否定时间。要禁用它。
CacheDuration time.Duration `json:"cache_duration"`
//默认0,缓存控制http-head的值(单位秒)
MaxAge int `json:"max_age"`
// 默认nil,定义一个函数来更改响应
ModifyResponse Handler
// 默认nil,定义返回true时跳过此中间件的函数
Next func(c *Ctx) bool
}
Route Handlers
注册绑定到特定 HTTP method 的路由
// http方法
func (app *App) Get(path string, handlers ...Handler) Router
func (app *App) Head(path string, handlers ...Handler) Router
func (app *App) Post(path string, handlers ...Handler) Router
func (app *App) Put(path string, handlers ...Handler) Router
func (app *App) Delete(path string, handlers ...Handler) Router
func (app *App) Connect(path string, handlers ...Handler) Router
func (app *App) Options(path string, handlers ...Handler) Router
func (app *App) Trace(path string, handlers ...Handler) Router
func (app *App) Patch(path string, handlers ...Handler) Router
//添加所有方法到指定路由
func (app *App) All(path string, handlers ...Handler)
//添加指定方法
func (app *App) Add(method, path string, handlers ...Handler) Router
以上的方法在指定的path路由中,必须完全匹配,如"/api"仅能匹配"/api",不能匹配"/apixx"或"/api/xx"
//简单GET示例
app.Get("/api/list", func(c *fiber.Ctx)error{
return c.SendString("I'm a GET request!")
})
// 简单POST示例
app.Post("/api/register", func(c *fiber.Ctx) error {
return c.SendString("I'm a POST request!")
})
根据前缀匹配路由
func (app *App) Use(args ...interface{}) Router
类似于 All(),但 All()是精准匹配,Use 是前缀匹配,只要前缀符合,无论之后有没有字符都会匹配
app.Use(func(c *fiber.Ctx) error {return c.Next()})
//不指定路由,匹配任何请求
app.Use("/api", func(c *fiber.Ctx) error {return c.Next()})
//匹配任何以/api开始的请求,如/apixx、/api/xx、/api/a/b等等
app.Use("/api", func1,func2,...funcn)
//指定多个处理程序,按顺序执行处理程序,遇到c.Next()会向下执行下一个处理程序
Mount
通过创建 *mount 来挂载 Fiber 实例,将加载到的实例作为跟路由
func (a App) Mount(prefix string, app App) Router
micro := fiber.New()
micro.Get("/doe", func(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusOK)
})
app := fiber.New()
app.Mount("/john", micro)
// GET /john/doe -> 200 OK
Group
通过创建 *group 结构体来创建群组路由
func (app *App) Group(prefix string, handlers ...Handler) Router
func main() {
app := fiber.New()
api := app.Group("/api", handler) // /api
v1 := api.Group("/v1", handler) // /api/v1
v1.Get("/list", handler) // /api/v1/list
v2 := api.Group("/v2", handler) // /api/v2
v2.Get("/list", handler) // /api/v2/list
}
Server
服务器返回底层 fasthttp Server
func (app *App) Server() *fasthttp.Server
func main() {
app := fiber.New()
app.Server().MaxConnsPerIP = 1
}
Stack
返回原始路由器堆栈
func (app *App) Stack() [][]*Route
var handler = func(c *fiber.Ctx) error { return nil }
func main() {
app := fiber.New()
app.Get("/john/:age", handler)
app.Post("/register", handler)
data, _ := json.MarshalIndent(app.Stack(), "", " ")
fmt.Println(string(data))
}
Config
将 App Config 返回为值 (只读)
func (app *App) Config() Config
Handler
返回可用于服务自定义 * fasthttp.RequestCtx 请求的服务器处理程序
func (app *App) Handler() fasthttp.RequestHandler
Listen
收听来自给定地址的 HTTP 请求
func (app *App) Listen(addr string) error
app.Listen(":8080") // 监听端口 :8080
app.Listen("127.0.0.1:8080") // 自定义主机
ListenTLS
使用 certfile 和 keyfile 路径从给定地址提供 HTTPS 请求,以作为 TLS 证书和密钥文件
func (app *App) ListenTLS(addr, certFile, keyFile string) error
app.ListenTLS(":443", "./cert.pem", "./cert.key");