go kratos框架跨域中间件实现(v2)
warning:
这篇文章距离上次修改已过192天,其中的内容可能已经有所变动。
以下是一个简化的跨域中间件实现示例,适用于Kratos框架的版本v2:
package main
import (
"github.com/go-kratos/kratos/v2/middleware/logging"
"github.com/go-kratos/kratos/v2/middleware/recovery"
"github.com/go-kratos/kratos/v2/middleware/selector"
"github.com/go-kratos/kratos/v2/transport/http"
)
// 跨域中间件
func CORS() http.Middleware {
return func(handler http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Authorization")
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
handler(w, r)
}
}
}
func main() {
// 使用链式调用构建中间件链
middleware := selector.New(
recovery.Recovery(),
logging.Server(logging.WithLevel(logging.InfoLevel)),
CORS(), // 添加跨域中间件
)
// 构建HTTP服务
httpSrv := http.NewServer(
http.Middleware(middleware),
// 其他配置...
)
// 启动服务
if err := httpSrv.Start(); err != nil {
panic(err)
}
}
这段代码演示了如何在Kratos框架中为HTTP服务添加跨域中间件。它定义了一个CORS
函数,该函数返回一个中间件,该中间件设置必要的跨域响应头。然后,在主函数中,我们使用selector.New
来创建一个中间件链,其中包括错误恢复、日志记录和跨域中间件。最后,我们创建并启动了HTTP服务器。
评论已关闭