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


评论