2017-01-21 19 views
0

так я имел некоторые проблемы с этим в последнее время ... Вот мой код:Вызов http.FileServer в http.HandlerFunc

https://gist.github.com/anonymous/af1e6d922ce22597099521a4b2cfa16f

Моей проблема: Я пытаюсь обслуживать некоторые HTML-файлы из папки: ./docs/html. Моя структура папок:

. 
├── docs 
│ └── html 
│  ├── index.html 
│  └── rest.html 
└── main.go 

Вы заметите, в сущности, я звоню метод ServeHTTP на http.HandlerFunc ServeDocs, который затем собирается через маршрутизатор (mux.Router). Проблема у меня почему-то единственный файл, будучи подан в localhost:8080/ является index.html, и когда я перейти к localhost:8080/rest.html я получаю 404.

действительно нечетная часть является то, что, когда я удалить весь код маршрутизатора и сделайте примерно следующее:

fs := http.FileServer(http.Dir("./docs/html")) 
http.Handle("/", fs) 

log.Println("Listening...") 
http.ListenAndServe(":3000", nil) 

Все работает так, как должно. Кто-нибудь знает, что происходит? Я потратил часы, пытаясь понять это, и я, наконец, сдался.

ответ

1

Это работает, если вы используете mux.Router 's Path метод

r.Methods(route.Method).Name(route.Name).Handler(handler) 
r.Path(route.Pattern) 

вместо mux.Route' Path метод s (strikethrough'd ниже)

r.Methods (маршрут. Метод) .Path (route.Pattern) .Name (маршрут.Name) .Handler (обработчик)

Я не очень хорошо знаком с gorilla/mux, так что не удалось найти точную причину этого.

+0

Это так странно. Просто протестировано, и это сработало как шарм! Спасибо за помощь! –