关于goframe我列举出一些路由器中间件
LoggingMiddleware
(日志记录中间件):在处理请求前打印请求的 URL 路径,然后执行后续中间件和路由处理函数。AuthMiddleware
(权限验证中间件):检查请求头中的“Authorization”,若为空则返回 401 状态码,否则执行后续流程。ErrorHandlerMiddleware
(错误处理中间件):通过defer
和recover
捕获处理过程中的错误,若有错误则打印错误信息并返回 500 状态码。
用代码表示:
package main
import (
"fmt"
"github.com/gogf/gf/v2/net/ghttp"
)
// LoggingMiddleware 日志记录中间件
func LoggingMiddleware(r *ghttp.Request) {
fmt.Printf("Request URL: %s\n", r.URL.Path)
r.Middleware.Next()
}
// AuthMiddleware 权限验证中间件
func AuthMiddleware(r *ghttp.Request) {
// 模拟权限验证逻辑,这里假设通过请求头中的"Authorization"进行验证
authHeader := r.Header.Get("Authorization")
if authHeader == "" {
r.Response.WriteStatus(401)
return
}
r.Middleware.Next()
}
// ErrorHandlerMiddleware 错误处理中间件
func ErrorHandlerMiddleware(r *ghttp.Request) {
defer func() {
if err := recover(); err!= nil {
fmt.Println("Error occurred:", err)
r.Response.WriteStatus(500)
}
}()
r.Middleware.Next()
}
这段 Go 代码主要定义了三个路由中间件:
1. `LoggingMiddleware` :会打印出请求的 URL 路径,然后执行后续中间件和路由处理函数。
2. `AuthMiddleware` :通过获取请求头中的“Authorization”来模拟权限验证,如果该值为空,返回 401 状态码,否则继续执行后续流程。
3. `ErrorHandlerMiddleware` :使用 `defer` 和 `recover` 来捕获可能出现的运行时错误。如果捕获到错误,打印错误信息并返回 500 状态码,然后继续执行后续流程。
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(LoggingMiddleware)
group.Middleware(AuthMiddleware)
group.Middleware(ErrorHandlerMiddleware)
// 注册其他路由和处理函数
group.GET("/example", func(r *ghttp.Request) {
r.Response.Write("Hello, this is an example route.")
})
})
s.Run()
}
这段 Go 代码是一个使用 GoFrame 框架创建 HTTP 服务器的主函数。
首先创建了一个服务器实例 `s` 。 然后使用 `s.Group("/", func(group *ghttp.RouterGroup) {...})` 定义了一个以 `/` 为根路径的路由分组。
在这个分组中,依次注册了三个中间件:`LoggingMiddleware`(日志记录中间件)、`AuthMiddleware`(权限验证中间件)和 `ErrorHandlerMiddleware`(错误处理中间件)。 接着在这个分组中注册了一个 `GET` 类型的路由 `/example` ,对应的处理函数是 `func(r *ghttp.Request) {...}` ,该函数向响应中写入字符串 `"Hello, this is an example route."` 。 最后通过 `s.Run()` 启动服务器,使其开始监听并处理 HTTP 请求。