我有一个基本的Go服务器渲染单个页面。但是,当页面加载时,它无法检索静态资产(style.css,app.js),因为它们继续使用MIME类型“text / html”而不是各自的类型进行呈现。
加载页面时出现此错误:
资源解释为样式表,但使用MIME类型text / html传输:“http://localhost:8080/static/style.css”
我知道这个问题与HTTP标头有关,并设置了适当的Content-Type。但是,我不确定如何为页面本身检索的资产执行此操作。任何人都可以帮我解决这个问题吗?
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
}
答案 0 :(得分:3)
创建assetsHandler来处理静态资产请求。
// if you are using grilla/mux
router := mux.NewRouter()
router.HandleFunc("/static/"+`{path:\S+}`, AssetsHandler)
根据资产添加Content-Type Header
'后缀:
w.Header().Set("Content-Type", "text/css")
.css
- > text/css
.js
- > text/javascript
...