App 实例

未匹配的标注

🚀 App

App实例通常表示Fiber应用程序。

Static

使用Static方法来服务静态文件,例如imagesCSS,JavaScript

提示:默认情况下,Static将在响应目录上的请求时提供index.html文件。

签名:

func (app *App) Static(prefix, root string, config ...Static) Router

使用以下代码在名为./public的目录中提供文件

示例:

app.Static("/", "./public")

// => http://localhost:3000/hello.html
// => http://localhost:3000/js/jquery.js
// => http://localhost:3000/css/style.css

示例:

// Serve files from multiple directories
app.Static("/", "./public")

// Serve files from "./files" directory:
app.Static("/", "./files")

你可以为由静态方法提供的文件使用任何虚拟路径前缀(该路径在文件系统中实际不存在),为静态目录指定一个前缀路径,如下所示:

示例:

app.Static("/static", "./public")

// => http://localhost:3000/static/hello.html
// => http://localhost:3000/static/js/jquery.js
// => http://localhost:3000/static/css/style.css

如果您希望对提供静态文件的设置有一点控制。您可以使用fiber.Static结构体来实现特定设置。

fiber.static {}

//静态定义定义静态资产时的配置选项。
type Static struct {
    //设置为true时,服务器尝试通过缓存压缩文件最小化CPU使用率。
    //这与Github.com/gofiber/Compression中间件不同。
    //可选,默认值False.
     Compress bool `json:"compress"`

    //设置为true时,启用字节范围请求。
    //可选,默认值False.
    ByteRange bool `json:"byte_range"`

    //设置为true时,启用目录浏览。
    //可选,默认值false。
    Browse bool `json:"browse"`

    //用于服务目录的索引文件的名称。
    //可选,默认值“index.html”。
    Index string `json:"index"`

    //非活动文件处理程序的失效持续时间。
    //使用否定时间。要禁用它。
    //
    // 可选,默认值10 * time.second。
      CacheDuration time.Duration `json:"cache_duration"`

    //缓存控制http-head的值
    //设置在文件响应上。 maxage在几秒钟内定义。
    //
    //可选,默认值0。
     MaxAge int `json:"max_age"`

    // next定义返回true时跳过此中间件的函数。
    //
    // 可选,默认值:nil.
    Next func(c *Ctx) bool
}

示例:

//自定义配置
app.Static("/", "./public", fiber.Static{
  Compress:      true,
  ByteRange:     true,
  Browse:        true,
  Index:         "john.html"
  CacheDuration: 10 * time.Second,
  MaxAge:        3600,
})

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) Add(method, path string, handlers ...Handler) Router

//所有人都将在所有HTTP方法上注册路由
//几乎与app.USE相同但不符合前缀
func (app *App) All(path string, handlers ...Handler) Router

示例:

//简单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!")
})

使用可用于中间件包和前缀捕集器。这些路由只会匹配每个路径的开头,即/john将匹配/john /doe/johnnnn

签名

func (app *App) Use(args ...interface{}) Router

示例:

//匹配任何请求
app.Use(func(c *fiber.Ctx) error {
    return c.Next()
})

//匹配请求以/api开始
app.Use("/api", func(c *fiber.Ctx) error {
    return c.Next()
})

//附加多个处理程序
app.Use("/api",func(c *fiber.Ctx) error {
  c.Set("X-Custom-Header", random.String(32))
    return c.Next()
}, func(c *fiber.Ctx) error {
    return c.Next()
})

Mount

您可以通过创建* mount来挂载Fiber实例

签名

func (a *App) Mount(prefix string, app *App) Router

示例

func main() {
    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

    log.Fatal(app.Listen(":3000"))
}

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
  v1.Get("/user", handler)          // /api/v1/user

  v2 := api.Group("/v2", handler)   // /api/v2
  v2.Get("/list", handler)          // /api/v2/list
  v2.Get("/user", handler)          // /api/v2/user

  log.Fatal(app.Listen(":3000"))
}

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))

    app.Listen(":3000")
}

结果

[
  [
    {
      "method": "GET",
      "path": "/john/:age",
      "params": [
        "age"
      ]
    }
  ],
  [
    {
      "method": "HEAD",
      "path": "/john/:age",
      "params": [
        "age"
      ]
    }
  ],
  [
    {
      "method": "POST",
      "path": "/register",
      "params": null
    }
  ]
]

Config

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

示例

// 监听端口 :8080 
app.Listen(":8080")

// 自定义主机
app.Listen("127.0.0.1:8080")

ListenTLS

ListenTLS使用certfile和keyfile路径从给定地址提供HTTPS请求,以作为TLS证书和密钥文件。

签名:

func (app *App) ListenTLS(addr, certFile, keyFile string) error

示例

app.ListenTLS(":443", "./cert.pem", "./cert.key");

使用ListenTLS默认值到以下配置(使用Listener提供自己的配置)

*默认 tls.Config**

&tls.Config{
    MinVersion:               tls.VersionTLS12,
    PreferServerCipherSuites: true,
    Certificates: []tls.Certificate{
        cert,
    },
}

Listener

您可以使用Listener方法传递自己的net.listener。此方法可用于使用自定义tls.config启用TLS/HTTPS

签名:

func (app *App) Listener(ln net.Listener) error

示例:

ln, _ := net.Listen("tcp", ":3000")

cer, _:= tls.LoadX509KeyPair("server.crt", "server.key")

ln = tls.NewListener(ln, &tls.Config{Certificates: []tls.Certificate{cer}})

app.Listener(ln)

Test

使用Test方法进行测试程序。使用此方法来创建_test.go文件或者当您需要调试路由逻辑时。如果要完全禁用超时,则默认超时为1s,将-1作为第二个参数。

签名:

func (app *App) Test(req *http.Request, msTimeout ...int) (*http.Response, error)

示例:

//创建带有测试方法的路由:
app.Get("/", func(c *fiber.Ctx) error {
  fmt.Println(c.BaseURL())              // => http://google.com
  fmt.Println(c.Get("X-Custom-Header")) // => hi

  return c.SendString("hello, World!")
})

// http.Request
req := httptest.NewRequest("GET", "http://google.com", nil)
req.Header.Set("X-Custom-Header", "hi")

// http.Response
resp, _ := app.Test(req)

// 用结果做点什么:
if resp.StatusCode == fiber.StatusOK {
  body, _ := ioutil.ReadAll(resp.Body)
  fmt.Println(string(body)) // => Hello, World!
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/gofiber/2.x/app...

译文地址:https://learnku.com/docs/gofiber/2.x/app...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~