Go Writing Web Applications チュートリアルに従いましたが、何らかの理由でアプリをCSSおよびJSに対応させるのに苦労しています。 Goサーバーなしで静的ページを実行すると、ページCSSは正常に機能します。一方、Goサーバーを実行すると、CSSは機能しません。
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">
body
タグの下:
<script src="../assets/js/jquery.min.js"></script>
<script src="../assets/js/bootstrap.min.js"></script>
ファイルツリーは次のようになります。
go-affect/
├── data
│ └── …
├── static
│ ├── css
│ │ └── …
│ └── js
│ │ └── …
├── tmpl
│ ├── edit.html
│ ├── index.html
│ └── view.html
└── main.go
Goアプリケーションを取得して、必要なCSSとJavaScriptを提供するにはどうすればよいですか?
問題はそれ以来解決されました、ここに作業メインがあります:
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)
}
私が使用しているハンドラーの例を次に示します。
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)
}
}
http.Handle("/", http.FileServer(http.Dir("css/")))
/
でcss
ディレクトリを提供します。もちろん、選択したパスでディレクトリを提供できます。
おそらく、静的パスが他のパスの邪魔にならないことを確認して、このようなものを使用したいでしょう。
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
js
とcss
の両方をプロジェクトのstatic
ディレクトリに配置します。これにより、domain.com/static/css/filename.css
およびdomain.com/static/js/filename.js
で提供されます
StripPrefix
メソッドはプレフィックスを削除するので、たとえば、検索しようとしません。 static/css/filename.css
のstatic
ディレクトリにありますが、もちろん見つかりません。 static
ディレクトリでcss/filename.css
を探しますが、これは正しいでしょう。
Apacheサーバーのcss dirへのリンクをテンプレートファイルのheadセクションに追加しました。 goアプリケーションが実行しているディレクトリの下に、goアプリケーションで使用されるテンプレートとデータファイルを保持します。この例では、cgi-bin。
テンプレートは、ApacheサーバーのCSSを使用しますassets/css
ディレクトリ:
<link rel="stylesheet" href="/assets/css/main.css" />