我尝试在我的Room.js服务器的客户端(v10.15.0+ express,socket.io)上使用index.html中的Node.js。我总是犯错误。当我通过index.html文件中的脚本标记加载它时,控制台会给我一个
加载“脚本”失败..。"Room.js“。 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"));发布于 2019-02-19 18:06:31
首先,检查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应用程序包。
https://stackoverflow.com/questions/54770569
复制相似问题