<scripts>节点js

时间:2019-02-19 16:12:38

标签: javascript node.js loading

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

  

使用..“ Room.js”加载“ script”失败。
   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"));

1 个答案:

答案 0 :(得分:0)

首先,检查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将给出错误信息,并且脚本将失败。

您应该从module.exports = Room;中删除第Room.js行,以便文件可以在浏览器中正确加载。但随后它将无法在Node.js脚本中运行,因为不会从文件中导出功能Room

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

相关问题