我有一个呈现单个页面的基本 Go 服务器。但是,当页面加载时,它无法检索静态 Assets (style.css、app.js),因为它们一直使用 MIME 类型“text/html”而不是它们各自的类型呈现。
加载页面时出现此错误:
Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:8080/static/style.css"
我知道问题与 HTTP header 和设置适当的内容类型有关。但是,我不确定如何为页面本身检索的 Assets 执行此操作。谁能帮我解决这个问题?
func renderTemplate(w http.ResponseWriter, r *http.Request, msg *Message, path string) {
t, err := template.ParseFiles(path)
if err != nil {
http.NotFound(w, r)
}
// problem is here I think
err = t.Execute(w, msg)
if err != nil {
fmt.Println("Error writing to response writer\n\b", err)
}
return
}
func mainHandler(w http.ResponseWriter, r *http.Request) {
renderTemplate(w, r, &Message{Title: "What the Fuck is Open?", Text: "Would you like to sort by prominence or distance?"}, HOME)
return
}
最佳答案
创建一个 assetsHandler 来处理静态 Assets 请求。
// if you are using grilla/mux
router := mux.NewRouter()
router.HandleFunc("/static/"+`{path:\S+}`, AssetsHandler)
根据 Assets 的后缀添加Content-Type Header
:
w.Header().Set("Content-Type", "text/css")
.css
-> text/css
.js
-> text/javascript
...
关于templates - 在 Golang 服务器中呈现 MIME 类型的 Assets 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39585208/