go - 我如何编写处理来自 API 的响应/错误的 golang 中间件?

标签 go middleware mux

基本上,我想编写一个中间件来关闭在请求时创建的事务对象。我正在使用 gorilla mux 包。我熟悉 python-Django 中间件,它可以正确处理错误或响应。但找不到与 golang 类似的东西

最佳答案

在 Go 语言中你也可以创建一个中间件,下面我将创建处理程序的过程编写为 validateMiddleware 然后在 TestEndpoint API 请求时调用它。

func main() {
    router := mux.NewRouter()

    router.HandleFunc("/test", ValidateMiddleware(TestEndpoint)).Methods("GET")
    log.Fatal(http.ListenAndServe(":12345", router))
}

现在您可以创建您的 validateMiddleware 处理程序:

    func ValidateMiddleware(next http.HandlerFunc) http.HandlerFunc {
        return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
            authorizationHeader := req.Header.Get("authorization")
                    if authorizationHeader != "" {
                        // if true, then request for next handler.
                        next(w, req)
                    } else {
                        json.NewEncoder(w).Encode(Exception{Message: "Invalid authorization token"})
                        return
                    }
        })
    }

最后创建原始请求的处理程序 TestEndpoint

func TestEndpoint(w http.ResponseWriter, req *http.Request) {
    fmt.Println("Hello Go middleware!!!")
}

关于go - 我如何编写处理来自 API 的响应/错误的 golang 中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52816646/

相关文章:

http - 如何重试 HTTP POST 请求

string - 将工作日字符串解析为 time.Weekday

go - "graphql.NewList(type)"是做什么的?

ruby - 获取通用 Rack 应用程序中中间件的有序列表?

rest - 在 REST 上不支持的 HTTP 方法返回什么响应代码?

mysql - 如何在 golang 中编写一个通用方法以在任何 mysql 表中插入记录

ubuntu - 如何一次运行多个存在于不同目录中的 go 程序?

docker - Traefik中间件无法与docker compose一起使用

javascript - ExpressJS > 路由器中间件 > 通过重定向传递变量 req.foo 不起作用

go - 在任何一个中都找不到包 "github.com/gorrila/mux"