templates - 在 Golang 服务器中呈现 MIME 类型的 Assets 时出错

标签 templates go server mime-types mime

我有一个呈现单个页面的基本 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/

相关文章:

c++ - 如何从元组创建元组?

variable-assignment - Go 中的同时赋值

docker - 从另一个容器访问Neo4J

sockets - UDP 套接字未从 Go 中的服务器读取

c++ - 如何让 ADL 更喜欢一个函数模板而不是另一个

c++ - std::size 和 std::empty 的特化与模板不匹配

c++ - 如何编写一个完美的缩写函数模板?

algorithm - 所有 N 的 k 组合数

java - 类路径资源 [public] 无法解析为 URL,因为它不存在 (SPARK)

php - 设置 mySql 服务器和 Xampp 现在需要了解基本的安全性