Вызов нескольких дескрипторов внутри ListenAndServe - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу использовать несколько обработчиков внутри метода 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: undefined: r

Вопрос:

Теперь он не принимает более двух аргументов, так есть ли альтернатива для этого?

1 Ответ

0 голосов
/ 21 декабря 2018

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 необходимо проверить.Я бы сказал, принести в библиотеку на этом этапе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...