我尝试在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:未定义房间
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(){}
}
<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"));
答案 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应用程序捆绑程序。