英文:
Golang Echo e.Pre vs e.Use
问题
在Golang的Echo框架中,e.Pre
和e.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.Use
和e.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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论