站长网 语言 Go Fiber 框架一系列:中间件

Go Fiber 框架一系列:中间件

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 %v\n", 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 是类似的。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/biancheng/yuyan/2021/1102/18384.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部