Обслуживание подкаталогов в обработчиках HTTP [GoLang]

У меня есть следующий код:

r := mux.NewRouter()
r.Handle("/", http.FileServer(http.Dir("./frontend/build/")))
r.Handle("/static", http.FileServer(http.Dir("./frontend/build/static/")))
r.PathPrefix("/api").Handler(auth)

/api должен быть безопасным. Если пользователь нажимает /, я хочу, чтобы он просматривал index.html в каталоге PROJECTDIR/frontend.

Каталог внешнего интерфейса выглядит так

frontend
    /build
        index.html
        /static
            /js
            /css
            /media

index.html загружает все содержимое из /static. Независимо от того, как я настраиваю это, когда я посещаю localhost:3000, я могу получить index.html, но все, что ниже /static, имеет код 404.

Как я настраиваю это неправильно?


person Nathan Hyland    schedule 26.04.2017    source источник
comment
См. этот аналогичный QA   -  person putu    schedule 26.04.2017


Ответы (1)


Предполагая, что вы хотите обслуживать все содержимое каталога «static» в конечной точке /static и вы используете машину bsd/linux, должен работать следующий синтаксис:

http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./static"))))
person George    schedule 26.04.2017
comment
Я на MacOS (и работаю на Heroku в сборке). Предполагая, что вы имеете в виду полный путь к статическому? Это не работает. r.Handle(/, http.FileServer(http.Dir(frontend/build/))) http.Handle(/static/, http.StripPrefix(/static/, http.FileServer(http.Dir(frontend/build/static /)))) r.PathPrefix(/api).Handler(auth) - person Nathan Hyland; 26.04.2017
comment
http.Dir(frontend/build/static/) не указывает правильный путь. Вам нужно либо начать путь с /, чтобы обозначить корень вашей машины (таким образом, путь будет примерно таким, как /home/myuser/myapp/static), либо с ./, чтобы указать текущий каталог, из которого вы запускаете свое приложение, в качестве начальная точка вашего пути (поэтому, если вы работаете с /home/myuser/myapp/, ./ будет переведено на это) - person George; 26.04.2017