2015-04-25 3 views
2

Я использую маршрутизатор (httprouter) и хотел бы обслуживать статические файлы от root.Проблема с Httprouter со статическими файлами

CSS файл в

static/style.css

в шаблоне

<link href="./static/style.css" rel="stylesheet">

main.go

router := httprouter.New() 
router.ServeFiles("/static/*filepath", http.Dir("/static/")) 
router.GET("/", Index) 

Но http://localhost:3001/static/style.css дает мне ошибку 404, и стиль в странице рендеринга тоже не работает.

+0

Опустить конечную косую черту в "/ static /"? Помимо этого, вы можете попробовать добавить некоторые Printfs в модуль маршрутизатора, чтобы узнать, что происходит. –

ответ

4

Попробуйте заменить http.Dir("/static/") на http.Dir("static") (что будет относительным путем к вашему статическому каталогу) или с помощью http.Dir("/absolute/path/to/static"). Ваш пример с этим единственным изменением работает для меня.

Также см httprouter-х ServeFiles документации:

func (r *Router) ServeFiles(path string, root http.FileSystem)

ServeFiles служит файлы из данной корневой файловой системы. Путь должен заканчиваться на «/ * путь к файлу», затем файлы передаются из пути path/defined/root/dir/*. Например, если root является «/ etc» и * filepath является «passwd», будет использоваться местный файл «/ etc/passwd». Внутри используется http.FileServer, поэтому вместо обработчика NotFound маршрутизатора используется http.NotFound. Для того, чтобы использовать реализацию файловой системы операционной системы, используйте http.Dir:

router.ServeFiles ("/ SRC/* Путь к файлу", http.Dir ("/ Var/WWW"))

Это может также окажут помощь - Third-party router and static files

Должен признаться, что мне непонятно, почему «статический» требуется дважды. Если я установил http.Dir в "." все это работает с единственной разницей, что мне нужно перейти на localhost: 3001/static/static/style.css

2

В вызове router.ServeFiles("/static/*filepath", http.Dir("/static/")) второй аргумент предоставляет root и первый arg определяет путь от этого корня. Итак, попробуйте

router.ServeFiles("*filepath", http.Dir("/static")) 

без упоминания /статический/ дважды.

+0

'panic: путь должен заканчиваться/* filepath в пути '* filepath'' if"/* filepath ", чем' panic: path segment'/'конфликтует с существующим шаблоном/* filepath' в пути '/' ' –

+0

Can вы пытаетесь использовать router.ServeFiles («static/* filepath», http.Dir («/»)) или, возможно, router.ServeFiles («/ static/* filepath», http.Dir («»)), чтобы быть более согласованными с шаблоном , В любом случае не упоминайте/static/two, потому что/reminder/path добавляется с/root – Uvelichitel

Смежные вопросы