Отправить собственный ответ в gorilla mux, если метод маршрута не соответствует - PullRequest
0 голосов
/ 16 июня 2020

как я могу отправить собственный ответ, если метод маршрута (HTTP Verb) не совпадает?

Когда я нажимаю следующий маршрут в методе публикации

r.handleFunc("/destination", handler).Methods('GET')

Я хочу получить (предположим, что это ответ JSON)

{
    status: "ERROR",
    message: "Route method not supported."

}

Идея в том, что я не хочу, чтобы каждый обработчик выполнял route.Method == $ METHOD check. Ищу способ, где я могу определить один раз и применить к каждому маршруту.

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Чтобы настроить собственный возврат для методов маршрута, вы можете просто переопределить обработчик MethodNotAllowedHandler своим собственным.

Пример:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {

    log.Fatal(http.ListenAndServe(":8080", router()))
}

func router() *mux.Router {

    r := mux.NewRouter()

    r.HandleFunc("/destination", destination).Methods("GET")
    r.MethodNotAllowedHandler = MethodNotAllowedHandler()
    return r
}

func destination(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "destination output")
}

func MethodNotAllowedHandler() http.Handler {

    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        fmt.Fprintf(w, "Method not allowed")
    })
}
0 голосов
/ 16 июня 2020

Загляните в репозиторий gorilla / handler. Он содержит обработчики промежуточного программного обеспечения (например, обработчики, которые выполняются перед вашим основным обработчиком), включая обработчик для проверки, разрешен ли метод HTTP . Например:

MethodHandler{
  "GET": myHandler,
}

Любой другой метод автоматически вернет ответ 405 Method not allowed.

...