2016-03-09 11 views
6

ich Setup eine Route in server.js in Paket main in Stammverzeichnis des ProjektsBild laden und CSS in Golang

http.HandleFunc("/",route.IndexHandler)

Die IndexHandler in Paket route wie folgt implementiert:

func IndexHandler(w http.ResponseWriter, r *http.Request) { 
    data:=struct{ 
     Name string 
    }{ 
     "My name", 
    } 
    util.RenderTemplate(w, "index", data) 
} 

Die RenderTemplate Funktion wird im Paket util wie folgt implementiert:

func RenderTemplate(w http.ResponseWriter, tmpl string, data interface{}) { 
    cwd, _ := os.Getwd() 
    t, err := template.ParseFiles(filepath.Join(cwd, "./view/" + tmpl + ".html")) 
    if err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
     return 
    } 
    err = t.Execute(w, data) 
    if err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
    } 
} 

Verzeichnisstruktur in Projekt wie folgt aus:

/ 
/public/css 
/public/images 
/public/js 
/route 
/view 

index.html Blick in Ordner befindet view, Router ist in Ordner route

In index.html I gehören Ressourcen wie diese:

<link rel="stylesheet" type="text/css" href="../public/css/style.css">

<img src="../public/images/img_landing_page_mac.png">

Wenn der entsprechende Pfad angefordert wird, wird index.html weiterhin gerendert, aber Bilder und Stylesheet werden nicht geladen. Wie kann ich tun, um sie in Golang HTML Template Engine aufzunehmen?

Antwort

7

Sie müssen Ihren Server explizit auffordern, statische Dateien zu liefern.

Siehe http.FileServer

In Ihrem Fall eines anderen Handler registrieren.

http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("public")))) 
+0

Es vollständig funktioniert einen statischen Dateiserver Griff registrieren! Vielen Dank! – necroface

2

Wie Aruna sagte

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

Und zu verwenden, um die Dateien in Ihrem HTML, einfach

<img src="/public/images/img_landing_page_mac.png">