Обслуживание файлов stati c на HTTP-сервере - PullRequest
2 голосов
/ 21 июня 2020

Я использую golang в качестве серверной части для веб-приложения среднего размера, которое имеет несколько страниц и много CSS и javascript в разных папках. Я пытаюсь обслуживать веб-сайт, используя golang, но загружается только индексный файл, остальные страницы javascript, CSS загружаются. так как мои HTML файлы отличаются друг от друга, я не использую шаблоны

вот структура файла

-static 
    -assets
        -css(folder with subfolders)
        -js(folder with subfolders)
    -pages (folder with differnt html pages)
         -signup.html
         -dashboard.html
    -index.html
    -register_bundle.js
-main.go
func handlerequests (){
 myRouter := mux.NewRouter().StrictSlash(true)
 myRouter.Handle("/", http.FileServer(http.Dir("./static")))
 myRouter.HandleFunc("/transaction", transactionHandler)
 log.Fatal(http.ListenAndServe(":8080",myRouter))
}

мои HTML файлы имеют ссылки вроде эти (с указанием индекса. html)

<!-- CSS Files -->
  <link href="./assets/css/bootstrap.min.css" rel="stylesheet" />
  <link href="./assets/css/paper-dashboard.css?v=2.1.1" rel="stylesheet" />
<!--JS files -->
  <script src="./assets/demo/demo.js"></script>
  <!--Main Script file for the page  -->
  <script src="./register_bundle.js"></script>

показаны здесь ошибки

enter image description here

введите описание изображения здесь

Ответы [ 3 ]

2 голосов
/ 21 июня 2020

Проблема в том, что браузер не может найти эти файлы JS и CSS.

    fs := http.FileServer(http.Dir("./static"))
    MUXRouter.Handle("/", fs)
    MUXRouter.PathPrefix("/assets/").Handler(fs)
    MUXRouter.PathPrefix("/pages/").Handler(fs)
    MUXRouter.Handle("/register_bundle.js", fs)

Таким образом, запрос GET к http://[host]:[port]/css/style.css вернет стиль. css из относительного ./static/css/ каталог. Приведенный выше код работает в моем примере программы.

2 голосов
/ 22 июня 2020

попробуйте

gor:= mux.NewRouter().StrictSlash(true)

fs := http.FileServer(http.Dir("./static"))
gor.PathPrefix("/transaction").Handler(fs)

он, вероятно, должен работать, если он просто не пытается прочитать документацию для http.FileServer

1 голос
/ 21 июня 2020

пробовали ли вы использовать обработчик для папки ресурсов?

sdir := "/resources/"
myRouter.PathPrefix(sdir).Handler(http.StripPrefix(sdir, http.FileServer(http.Dir("."+sdir))))

это позволяет вам получить доступ к папке как к поддомену.

...