Golang中的Echo框架中的e.Pre和e.Use有什么区别?

huangapple go评论97阅读模式
英文:

Golang Echo e.Pre vs e.Use

问题

在Golang的Echo框架中,e.Pree.Use有什么区别?

例如,在以下代码中:

e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Pre(middleware.RemoveTrailingSlash())

为什么不直接这样写:

e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Use(middleware.RemoveTrailingSlash())

甚至可以这样写:

e.Pre(middleware.Logger())
e.Pre(middleware.Recover())
e.Pre(middleware.RemoveTrailingSlash())

e.Usee.Pre都是Echo框架中用于注册中间件的方法,但它们的执行顺序不同。

  • e.Use方法用于注册全局中间件,这些中间件将在每个请求的处理过程中都会被调用。它们的执行顺序是按照注册的顺序依次执行。

  • e.Pre方法用于注册预处理中间件,这些中间件将在路由匹配之前被调用。它们的执行顺序是按照注册的顺序相反执行,即最后注册的预处理中间件最先执行。

因此,在给定的示例代码中,e.Use用于注册全局中间件,而e.Pre用于注册预处理中间件。如果将所有中间件都使用e.Use注册,那么它们的执行顺序将与注册的顺序一致。而使用e.Pre注册的中间件将在路由匹配之前执行,可以用于一些需要在路由匹配之前进行处理的场景。

英文:

In Golang's Echo, what's the difference between e.Pre and e.Use?

e.g. in this code

e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Pre(middleware.RemoveTrailingSlash())

why not just do

e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Use(middleware.RemoveTrailingSlash())

or even

e.Pre(middleware.Logger())
e.Pre(middleware.Recover())
e.Pre(middleware.RemoveTrailingSlash())

答案1

得分: 2

根据Echo的中间件文档

使用Echo#Use()注册的中间件仅对在调用Echo#Use()之后注册的路径执行。

...

Echo#Pre()可以用于注册在路由器处理请求之前执行的中间件。这对于对请求属性进行任何更改非常有用,例如,添加或删除路径末尾的斜杠,以使其与路由匹配。

英文:

According to Echo's documentation on Middlewares:

> Middleware registered using Echo#Use() is only executed for paths which are registered after Echo#Use() has been called.
>
> ...
>
> Echo#Pre() can be used to register a middleware which is executed before router processes the request. It is helpful to make any changes to the request properties, for example, adding or removing a trailing slash from the path so it matches the route.

huangapple
  • 本文由 发表于 2022年12月7日 21:40:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/74717586.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定