服务 CSS 时在 Golang 中出现 MIME 类型('text/plain')错误

我正在构建我的第一个 Go web 项目,当我加载我的页面时,我在浏览器控制台上收到此错误


Refused to apply style from 'http://localhost:8080/static/css/processor-auth.css' because its MIME type ('text/plain') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

我不确定我做错了什么,因为我已经添加了这段代码来加载静态文件


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


这是我的 main.go 文件的样子:


 package main


import(

    "net/http"

    "os"

    "html/template"


    "github.com/julienschmidt/httprouter"

)



// Auth struct handler

type auth struct{}


func (auth *auth) ServeHTTP(w http.ResponseWriter, r *http.Request){

    wd,_:= os.Getwd()

    t := template.Must(template.ParseFiles(wd+"/templates/processor/auth.html"))

    err:=t.Execute(w,nil)


    if err !=nil{

        http.Error(w,"Could not execute template",500)

    }


}



func main(){


    router:= httprouter.New()

    // set the static files

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


    router.Handler("GET","/auth",&auth{})


    server := http.Server{

        Addr:"127.0.0.1:8080",

        Handler:router,

    }


    server.ListenAndServe()

}

http://img4.mukewang.com/6486763900014d0703440858.jpg

编辑:解决了问题

因为我用作httprouter多路复用器,所以我无法使用

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

我必须更新到 httprouter 的 ServeFiles 函数并将代码更新为 router.ServeFiles("/static/*filepath",http.Dir("static"))


慕村9548890
浏览 113回答 3
3回答

慕丝7291255

我使用的是 windows 机器(windows 10 和 windows server 2019),我在 javascript 文件上遇到了同样的问题,我进入注册表并将其从“text/plain”\HKEY_CLASSES_ROOT\.js > "Content Type"更改为“application/javascript”,然后重新启动 PC并修复了它

摇曳的蔷薇

为什么会这样?出现此错误是因为 Go 正在自动检测文件的内容类型。为了进行自动检测,它使用一个映射,该映射指向文件扩展名(如 .js)-> MIME 类型(如文本/纯文本)。要获取此地图,它会从本地机器读取它。因此,如果您的本地计算机在其注册表(或您的操作系统的等效项)中对于 .css 文件的值不正确,并且您使用的代码会自动检测正在提供的文件的 MIME 类型,那么这可能会发生。什么是注册表设置不正确?我在重新安装或卸载 Visual Studio 时遇到不正确的注册表值。Windows修复您需要使用 regedit 编辑注册表项,以便“内容类型”注册表项指向正确的值。您可以在两个地方找到扩展密钥:HKEY_CLASSES_ROOT 包含一个列表。就我而言,我在该列表中查找 .js 并将其值从 text/plain 更改为 application/javascript。在原始发帖者的位置,错误似乎在 .css 中,因此您将 HKEY_CLASSES_ROOT\.css 键“内容类型”设置为文本/css。HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES 也包含一个列表。您应该以相同的方式更新它,使其与 HKEY_CLASSES_ROOT 相匹配。在我的例子中,这已经正确设置为 application/javascript 所以我假设它不是 Go 正在读取的第一个注册表值。参考去问题: https: //github.com/golang/go/issues/32350

慕姐4208626

我在 Windows 上遇到了这个问题,我通过func FixMimeTypes() {    err1 := mime.AddExtensionType(".js", "text/javascript")    if err1 != nil {        log.Printf("Error in mime js %s", err1.Error())    }    err2 := mime.AddExtensionType(".css", "text/css")    if err2 != nil {        log.Printf("Error in mime js %s", err2.Error())    }}信用在这里
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go