猿问

在 ListenAndServe 中调用多个句柄

我想在包ListenAndServe的方法中使用多个处理程序http。例如:


if err := http.ListenAndServe(":"+s.config.Port,

    handlers.LoggingHandler(os.Stdout, s.router),

    handlers.CORS()(r.router)

); err != nil {

问题:


每次我收到以下错误:


pkg/server/server.go:30:31: 调用 http.ListenAndServe 的参数太多 (string, http.Handler, http.Handler) want (string, http.Handler) pkg/server/server.go:30 :113: 未定义: r


问题:


现在它不接受超过 2 个参数,那么还有其他选择吗?


PIPIONE
浏览 133回答 1
1回答

牛魔王的故事

ListenAndServe只需要一个http.Handler.在不引入库的情况下执行此操作的最简单方法是构建一个http.Handler包含以下两者的库:func simpleChain(hs ...http.Handler) http.Handler {  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){    for _, h := range hs {      h.ServeHTTP(w, r)    }  })}但是,如果任何处理程序想要对 . 执行某些操作Request.Body或写入ResponseWriter.例如,您可能希望处理程序检查请求是否具有权限,然后防止调用其他处理程序。这意味着ResponseWriter需要检查 的状态代码。我会说在这一点上带一个图书馆。
随时随地看视频慕课网APP

相关分类

Go
我要回答