【golang】解决 gin 的静态文件功能的 JavaScript module script but the server responded with a MIME type of "text/plain" 错误
问题
vite + vue 打包后,扔到 go 的 gin 服务中,windows 莫名报错
go 静态文件代码:
router.Static("/vue_assets", "./vue_static/vue_assets")
错误信息
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/plain".
Strict MIME type checking is enforced for module scripts per HTML spec.
网上的解决办法
注册表 HKEY_CLASSES_ROOT 有个 .js 项 Content Type=text/plain
改成 Content Type=text/javascript
问题分析
明显是 gin 对于 .js 的静态文件的返回的 Content-Type 依赖于 windows 环境的注册表,那如果换个环境有可能还是会发生错误
需要一个方法来固定下来 .js 返回的 Content-Type
代码调试
通过调试源代码,可知 gin 的静态文件服务依赖于 go http 模块的 静态文件服务
而 http 模块对文件类型的判断则依赖于 mime 模块的文件判断
mime.TypeByExtension(filepath.Ext(name))
如下图:
问题解决
这下就清楚了,通过调查 mime 源码,对 mime 模块设置固定的文件类型来处理就ok
mime.AddExtensionType(".js", "text/javascript; charset=utf-8")
这样 Content-Type 的返回就ok了
本文作者:endlesstravel
本文链接:https://www.cnblogs.com/night-ride-depart/p/16672120.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步