J'essaie d'utiliser mux
package du Gorilla toolkit pour router les URL sur un serveur Web Go. En utilisant cette question comme guide, j'ai le code Go suivant:
func main() {
r := mux.NewRouter()
r.Handle("/", http.FileServer(http.Dir("./static/")))
r.HandleFunc("/search/{searchTerm}", Search)
r.HandleFunc("/load/{dataId}", Load)
http.Handle("/", r)
http.ListenAndServe(":8100", nil)
}
La structure du répertoire est la suivante:
...
main.go
static\
| index.html
| js\
| <js files>
| css\
| <css files>
Les fichiers Javascript et CSS sont référencés dans index.html
comme ça:
...
<link rel="stylesheet" href="css/redmond/jquery-ui.min.css"/>
<script src="js/jquery.min.js"></script>
...
Lorsque j'accède à http://localhost:8100
dans mon navigateur Web, le index.html
le contenu est livré avec succès, cependant, toutes les URL js
et css
renvoient 404s.
Comment puis-je obtenir le programme pour servir des fichiers à partir de sous-répertoires static
?
Je pense que vous cherchez PathPrefix
...
func main() {
r := mux.NewRouter()
r.HandleFunc("/search/{searchTerm}", Search)
r.HandleFunc("/load/{dataId}", Load)
r.PathPrefix("/").Handler(http.FileServer(http.Dir("./static/")))
http.ListenAndServe(":8100", r)
}
Après beaucoup d'essais et d'erreurs, les deux réponses ci-dessus m'ont aidé à trouver ce qui a fonctionné pour moi. J'ai un dossier statique dans le répertoire racine de l'application Web.
Avec PathPrefix
, j'ai dû utiliser StripPrefix
pour que la route fonctionne récursivement.
package main
import (
"log"
"net/http"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
s := http.StripPrefix("/static/", http.FileServer(http.Dir("./static/")))
r.PathPrefix("/static/").Handler(s)
http.Handle("/", r)
err := http.ListenAndServe(":8081", nil)
}
J'espère que cela aide quelqu'un d'autre à avoir des problèmes.
J'ai ici ce code qui fonctionne assez bien et est réutilisable.
func ServeStatic(router *mux.Router, staticDirectory string) {
staticPaths := map[string]string{
"styles": staticDirectory + "/styles/",
"bower_components": staticDirectory + "/bower_components/",
"images": staticDirectory + "/images/",
"scripts": staticDirectory + "/scripts/",
}
for pathName, pathValue := range staticPaths {
pathPrefix := "/" + pathName + "/"
router.PathPrefix(pathPrefix).Handler(http.StripPrefix(pathPrefix,
http.FileServer(http.Dir(pathValue))))
}
}
router := mux.NewRouter()
ServeStatic(router, "/static/")
Essaye ça:
fileHandler := http.StripPrefix("/static/", http.FileServer(http.Dir("/absolute/path/static")))
http.Handle("/static/", fileHandler)