在Golang服务器中呈现MIME资产类型时出错

时间:2016-09-20 03:21:20

标签: templates go server mime-types mime

我有一个基本的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
}

1 个答案:

答案 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

...