Параметры хоста недоступны в mux.Vars () - PullRequest
0 голосов
/ 14 июля 2020

Я использую маршрутизацию Gorilla mux с поддоменом с подстановочными знаками. Однако значение поддомена не заполняется в mux.Vars(). Вот мой пример программы:

package main

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

    "github.com/gorilla/mux"
)

func indexHandler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    log.Println(vars)
    fmt.Fprintf(w, "hello")
}

func main() {
    router := mux.NewRouter()
    router.Host("{subdomain}.localhost.com").Path("/{id}").HandlerFunc(indexHandler)

    srv := &http.Server{
        Handler: router,
        Addr:    ":8080",
    }
    log.Fatal(srv.ListenAndServe())
}

Я перехожу к http://sub.localhost.com:8080/123, и мой файл /etc/hosts обновлен соответствующим поддоменом. Mux правильно находит этот маршрут при отображении hello в браузере.

В этом случае я ожидаю, что vars будет иметь два ключа: subdomain и id со значениями sub и 123 соответственно. Однако, когда я печатаю значение vars, вот результат:

map[id:123]

Почему отсутствует subdomain? И как мне получить доступ к этому значению из своего обработчика?

1 Ответ

0 голосов
/ 14 июля 2020

Ваш тестовый формат URL-адреса неверен. Вы используете

http://sub.localhost.com/123:8080

, что дает URL-путь /123:8080 - скорее всего, неверный идентификатор.

Вместо этого вы хотите:

http://sub.localhost.com:8080/123

, что дает URL-путь /123, соответствующий вашему маршрутизатору.

...