加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Go Fiber 框架一系列:中间件

发布时间:2021-11-03 11:36:35 所属栏目:语言 来源:互联网
导读:Middleware(中间件) 是一个 Web 框架重要的组成部分,通过这种模式,可以方便的扩展框架的功能。目前 Go Web 框架都提供了 Middleware 的功能,也有众多可用的 Middleware。Fiber 也是如此,官方提供了众多的 Middleware,方便用户直接使用。本文先看看 Fib
Middleware(中间件) 是一个 Web 框架重要的组成部分,通过这种模式,可以方便的扩展框架的功能。目前 Go Web 框架都提供了 Middleware 的功能,也有众多可用的 Middleware。   Fiber 也是如此,官方提供了众多的 Middleware,方便用户直接使用。本文先看看 Fiber 中 Middleware 的定义,然后介绍 Fiber 中的几个 Middleware,最后自己实现一个 Middleware。   Fiber 文档中关于 Middleware 的说明:中间件是在 HTTP 请求周期中链接的函数,它可以访问用于执行特定操作(例如,记录每个请求或启用 CORS)的上下文。    Middleware 长什么样 设计用于更改请求或响应的函数称为中间件函数。Next 是 Fiber 路由器函数,当它被调用时,执行与当前路由匹配的下一个函数。   可见,中间件其实和 Handler 是一样的,只是用途有区别。或者说至少签名是一样的,这样才能更好的形成一个链。   因此,Fiber 中的中间件签名如下:   func(ctx *fiber.Ctx) error  Fiber 没有专门定义中间件类型。   此外,从 fiber.App.Use 方法也可以看到,中间件和普通的 Handler 并无本质不同。   // Use registers a middleware route that will match requests  // with the provided prefix (which is optional and defaults to "/").  //  //  app.Use(func(c *fiber.Ctx) error {  //       return c.Next()  //  })  //  app.Use("/api", func(c *fiber.Ctx) error {  //       return c.Next()  //  })  //  app.Use("/api", handler, func(c *fiber.Ctx) error {  //       return c.Next()  //  })  //  // This method will match all HTTP verbs: GET, POST, PUT, HEAD etc...  func (app *App) Use(args ...interface{}) Router {   var prefix string   var handlers []Handler     for i := 0; i < len(args); i++ {    switch arg := args[i].(type) {    case string:     prefix = arg    case Handler:     handlers = append(handlers, arg)    default:     panic(fmt.Sprintf("use: invalid handler %vn", reflect.TypeOf(arg)))    }   }   app.register(methodUse, prefix, handlers...)   return app  }  而 fiber.Handler 类型只是 func(*fiber.Ctx) error 的别名:   // Handler defines a function to serve HTTP requests.  type Handler = func(*Ctx) error  这点上,Gin 框架和 Fiber 是类似的。不过,有一些框架,比如 Echo,专门定义了中间件类型。但不管怎么样,中间件的本质和普通路由 Handler 是类似的。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读