使用Negroni时,是否可以全局使用自定义HTTP处理程序?

时间:2015-08-29 13:09:27

标签: go negroni

要确保在所有请求中正确处理错误结果,我正在实现http://blog.golang.org/error-handling-and-go中所述的自定义处理程序。因此,处理程序可选择返回w http.ResponseWriter, r *http.Request

,而不仅仅接受error参数

我正在使用Negroni并想知道我是否可以设置一次将所有请求包装到handler中,或者是否总是必须按照{{1}为每个请求进行设置和以下示例中的/

/foo

1 个答案:

答案 0 :(得分:0)

如果需要,您可以在r.Handle周围编写一个包装器。您不能使用Negroni全局执行此操作,因为并非您使用的所有中间件都采用handler类型。

e.g。

// Named to make the example clear.
func wrap(r *mux.Router, pattern string, h handler) *mux.Route {
    return r.Handle(pattern, h)
}

func index(w http.ResponseWriter, r *http.Request) error {
    io.WriteString(w, "Hello")
    return nil
}

func main() {
    r := mux.NewRouter()
    wrap(r, "/", index)

    http.ListenAndServe(":8000", r)
}

我认为这并不比仅显式地对您的处理程序进行类型转换(这很清楚,如果有点重复)或将处理程序类型转换为结构要好得多。后者可以稍后扩展为包含线程安全字段(您的数据库池,应用程序配置等),然后您可以显式地传递每个处理程序。)

实际上,您当前的路由器代码仍然清晰易读,并且很明显(对其他人来说)支持处理程序的类型是什么。