Go Fiber 框架一系列:中间件
发布时间:2021-11-03 05:41:44  所属栏目:语言  来源:互联网 
            导读: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 是类似的。 (编辑:锡盟站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
站长推荐
            
        
