Jak serwować CSS i JS W Go

Śledziłem Go Pisanie aplikacji internetowych tutorial, ale z jakiegokolwiek powodu mam problem z uzyskaniem aplikacji do obsługi CSS i JS. Jeśli uruchamiam moją statyczną stronę bez serwera Go, CSS strony działa dobrze. Kiedy uruchamiam Serwer Go z drugiej strony CSS po prostu nie działa.

Oto jak wygląda mój HTML:

<link rel="stylesheet" href="../assets/css/bootstrap.min.css">
<link rel="stylesheet" href="../assets/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="../assets/css/custom.css">
        

Następnie pod tagiem body:

<script src="../assets/js/jquery.min.js"></script>
<script src="../assets/js/bootstrap.min.js"></script>

Moje drzewo plików wygląda tak:

go-affect/
├── data
│   └── …
├── static
│   ├── css
│   │   └── …
│   └── js
│   │   └── …
├── tmpl
│   ├── edit.html
│   ├── index.html
│   └── view.html
└── main.go

Jak mogę dostać moją aplikację Go do podać CSS i JavaScript, których potrzebuję?

EDIT:

Problem został rozwiązany, oto główna praca:

func main() {
    http.HandleFunc("/view/", makeHandler(viewHandler))
    http.HandleFunc("/edit/", makeHandler(editHandler))
    http.HandleFunc("/save/", makeHandler(saveHandler))
    http.HandleFunc("/index/", makeHandler(indexHandler))

    
    http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))

    http.ListenAndServe(":8080", nil)
}

Oto przykład obsługi, której używam:

func indexHandler(w http.ResponseWriter, r *http.Request, title string) {
    p := &Page{Title: title}
    err := templates.ExecuteTemplate(w, "index.html", p)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}
Author: Arun, 2017-04-25

2 answers

http.Handle("/", http.FileServer(http.Dir("css/")))

Poda Twój css katalog pod /. Oczywiście możesz obsługiwać dowolny katalog na dowolnej ścieżce, którą wybierzesz.

Prawdopodobnie chcesz się upewnić, że statyczna ścieżka nie jest na drodze innych ścieżek i użyj czegoś takiego.

http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))

Umieszczenie zarówno js jak i css w katalogu static w Twoim projekcie. To będzie im służyć w domain.com/static/css/filename.css i domain.com/static/js/filename.js

Metoda StripPrefix usuwa prefiks, więc nie próbuje szukać np. w static katalog static/css/filename.css, którego oczywiście nie znajdzie. Szukałby css/filename.css w katalogu static, co byłoby poprawne.

 27
Author: RayfenWindspear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-23 17:05:16

Dodałem link do katalogu css moich serwerów apache do sekcji head moich plików szablonów. Przechowuję pliki szablonu i danych używane przez dowolną aplikację go w katalogu, z którego działa aplikacja go. W tym przypadku cgi-bin.

Szablon wykorzystuje css z katalogu mojego serwera apache assets/css:

<link rel="stylesheet" href="/assets/css/main.css" />

Go apps run from my cgi-bin dir

Arkusze Sytle są serwowane z mojego katalogu Apache assets / css

 1
Author: Lyn Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-19 06:02:15