【发布时间】:2018-10-15 12:19:03
【问题描述】:
基本上,我想编写一个在请求时创建关闭事务对象的中间件。我正在使用 gorilla mux 包。我熟悉 python-Django 中间件,它可以正确处理错误或响应。但找不到与 golang 类似的东西
【问题讨论】:
标签: go middleware mux
基本上,我想编写一个在请求时创建关闭事务对象的中间件。我正在使用 gorilla mux 包。我熟悉 python-Django 中间件,它可以正确处理错误或响应。但找不到与 golang 类似的东西
【问题讨论】:
标签: go middleware mux
在 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!!!")
}
【讨论】:
else 部分看到的响应,如果在validateMiddleware 处理程序中授权失败,那么您也可以这样返回。如果您不想在抛出错误后执行进一步的代码,请不要忘记提及 return 关键字。
middleware?为什么不使用error 处理进程,例如:if err != nil { //something to response }