<scripts> 节点 js 加载失败

Posted

技术标签:

【中文标题】<scripts> 节点 js 加载失败【英文标题】:Loading failed for <scripts> node js 【发布时间】:2019-07-13 05:05:10 【问题描述】:

我尝试在我的 Node.js 服务器(v10.15.0 + express,socket.io)客户端的 index.html 中使用我的 Room.js。 我不断收到错误。 当我通过 index.html 文件中的脚本标签加载它时,控制台给了我一个

使用 ..“Room.js”加载“脚本”失败。 ReferenceError: 房间未定义

当我像这样在 app.js 中使用 require 时:

const roomObj = require("./client/js/Room.js");
const Room = new roomObj();

我只得到这个错误

ReferenceError:房间未定义

Room.js

module.exports = Room;
function Room(name, o, obs, ep)
 this.name = name;
 this.o = o;
 this.obs = obs;
 this.getSth = function(ep)
 this.loadRoom = function()

index.html

<script src="./js/Room.js"></script> 
<script>
 function loadRoom()
   let room = new Room(name, o, obs, ep);
   room.loadRoom();
 
</script>

更新

Room.js 出现 404 错误

当访问 localhost:2000/js/ 和以下子目录时,我得到了

无法获取 /js/ 并且所有其他路径的结果都相同

解决方案:(来自评论中的回答) 将 app.js 中的第 5-7 行替换为

app.use(express.static(__dirname + "/client"));

【问题讨论】:

查看您的网络检查器,看看您是否没有收到 404 错误。 Room.js 是否与 Web 服务器上的 index.html 位于同一目录中?你使用 Webpack 还是其他构建工具? 另外,您使用哪种浏览器?如果我尝试重现您的问题,我会收到 'module' is not defined 错误。 @Imarqs 是的,我收到 404 错误 @Filip 我使用的是 firefox 65.0.1x64,路径是 ./index.html 和 ./js/Room.js 【参考方案1】:

首先,检查Room.js 是否与Web 服务器上的index.html 位于同一目录中。从您的第一个错误来看,似乎找不到脚本文件。

如果没有,请将它们移动到同一目录或更正 inde.html 中的脚本标记。如果这不起作用,请参阅下面的另一种可能的解决方案。

评论后更新:

如果JS文件在./js/Room.js中,则需要将HTML文件中的脚本指向它。

<script src="./js/Room.js"></script> 
<script>
 function loadRoom()
   let room = new Room(name, o, obs, ep);
   room.loadRoom();
 
</script>

讨论后更新:

服务器 (Express) 在根目录中加载 index.html,在 Web 服务器的子目录中加载 client

您可以删除第 5-7 行(从您的链接中)并替换它们 与app.use(express.static(__dirname + "/client"));。这会将client 加载到Web 服务器的根目录。

请注意,您可能仍会遇到以下错误。


在浏览器中,module 没有定义,所以module.exports 会给出错误并且脚本会失败。

您应该从Room.js 中删除行module.exports = Room;,这样文件才能在浏览器中正确加载。但是它在 Node.js 脚本中不起作用,因为函数 Room 不会从文件中导出。

如果您需要在 Node.js 和浏览器中使用相同的文件,我建议您使用 Gulp、Webpack、Browserify、Parcel 或其他 Web 应用程序捆绑器。

【讨论】:

我的 script.src 中有错字(已编辑)。仍然出现同样的错误,我需要将图像数据从 Room.js 加载到 clientBrowser @jje32dys 检查是否收到 404。如果收到,可能是路径错误或存在其他 HTTP 错误。尝试在浏览器中手动打开您的Room.js 文件并检查它是否加载。另外,请尝试在另一个浏览器中进行测试。 大概就是这样,但路径与我提到的相同。可能是什么问题? 尝试直接在浏览器中打开脚本。可能路径在 HTML 文件中没有正确解析。另外,尝试使用其他浏览器。在带有广告拦截器的 Firefox 中存在一些类似的错误 (***.com/questions/45879671/…)。问题也可能与 SSL 证书有关。检查链接问题中的答案是否适合您。 您能否提供控制台和网络检查器中的确切错误(可能是一些屏幕截图)。另外,如果可能的话,将 URL 发布到您的服务器,以便我看看会发生什么。

以上是关于<scripts> 节点 js 加载失败的主要内容,如果未能解决你的问题,请参考以下文章

js的延迟脚本----defer与异步脚本----async

如何在html页面动态加载js文件

js异步加载

JS面试_<script;标签的位置

js怎样页面加载之前执行

react获取DOM节点