Gorilla mux - измените запрос перед передачей его маршрутизаторам - PullRequest
0 голосов
/ 01 марта 2020

Есть ли способ перехватить *http.Request объект до того, как он будет проанализирован и отправлен на Gorilla mux router handler?

Например, у нас есть некоторая карта маршрутизации с их обработчиками :

r := mux.NewRouter()
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)

Я планирую использовать префикс языка Dynami c (2 символа). Пример:

без кода языка (для языковой опции по умолчанию):

https://example.com/products/1
https://example.com/articels/2

с кодом языка:

https://example.com/ru/products/1
https://example.com/ru/articels/2

Есть ли способ перехватить полный URL в промежуточное программное обеспечение, распаковать язык (если существует) и затем после некоторых модификаций передать его маршрутизаторам mux Gorilla? Это поможет создать красивые URL:

https://example.com/products/1 <- default language
https://example.com/ru/products/1 <- russian language (same resource but in different language)

Это выглядит более привлекательно, чем этот вариант:

https://example.com/en/products/1 <- mandatory default language
https://example.com/ru/products/1 <- russian language

1 Ответ

2 голосов
/ 01 марта 2020

Что-то вроде этого, вероятно, будет работать:

r := mux.NewRouter()
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)

m := http.NewServeMux()
m.HandeFunc("/", func(w http.ResponseWriter, req *http.Request) {
    // do something with req
    r.ServeHTTP(w, req)
})
http.ListenAndServe(":8080", m)
...