跳转至localhost:3000/weather/new时JS脚本加载失败求助
问题分析与解决方案
从你的错误信息和页面代码来看,问题根源在于脚本路径错误和模板语法未被正确解析两个关键点:
1. 相对路径引发的jQuery加载失败
你引用jQuery的方式是相对路径:
<script src="js/jquery-2.1.4.min.js"></script>
- 当访问
localhost:3000时,相对路径会被解析为http://localhost:3000/js/jquery-2.1.4.min.js,这是正确的路径; - 但跳转到
localhost:3000/weather/new时,相对路径会变成http://localhost:3000/weather/js/jquery-2.1.4.min.js——这个路径不存在,服务器返回了HTML格式的404页面,浏览器因此提示MIME类型错误(text/html不是合法的JavaScript MIME类型),脚本加载失败。
解决方法:
把脚本路径改成绝对路径(和你引用CSS文件的方式保持一致):
<script src="/js/jquery-2.1.4.min.js"></script>
以/开头的路径会始终从网站根目录查找资源,不受当前子路由的影响。
2. 未解析的模板语法导致Skycons加载失败
从错误信息里的http://localhost:3000/weather/%7B%7Basset('/js/skycons.js')%7D%7D可以看出,你的Skycons脚本引用里的{{asset('/js/skycons.js')}}模板语法没有被服务器解析,直接被当成字符串输出(%7B%7B是{{的URL编码结果),导致请求了一个不存在的资源,同样返回HTML,最终引发ReferenceError: Skycons is not defined。
解决方法:
- 先检查模板引擎配置:确认服务器正确配置了对应模板的解析器(比如EJS、Handlebars等),模板文件的扩展名符合要求(比如
.ejs、.hbs),确保{{asset('/js/skycons.js')}}能被转换成正确的资源路径; - 如果暂时无法排查模板引擎问题,可以直接替换为绝对路径测试:
<script src="/js/skycons.js"></script>
验证步骤
修改完成后刷新页面,打开浏览器开发者工具的「网络」标签:
- 确认
jquery-2.1.4.min.js和skycons.js都返回200状态码,MIME类型为application/javascript; - 检查控制台是否还有
ReferenceError报错。
内容的提问来源于stack exchange,提问作者Kevin Terblanche
相关产品推荐
相关产品推荐

