使用电子时无法加载socket.io.js文件

我试图使用node.js与电子和socket.io聊天应用程序,但是当我尝试加载/socket.io/socket.io.js,我总是得到错误:

无法加载资源:net :: ERR_FILE_NOT_FOUND

如果我只是在端口3000上启动服务器,并把res.sendFile(__ dirname +“/ index.html”); 可以加载socket.io.js,但如果我使用电子,并把mainWindow.loadURL(“文件:”/ __ dirname +“/index.html”); 那么它给了我上面提到的错误。

这里是我的index.js页面的代码:

const electron = require('electron'); const {app, BrowserWindow} = electron; app.on('ready', function(){ var mainWindow = new BrowserWindow({ width: 1400, height: 800 }); mainWindow.loadURL("File://"+__dirname+"/index.html"); mainWindow.toggleDevTools(); }); 

这里是我的server.js页面:

 var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); users = []; connections = []; server.listen(process.env.PORT || 3000, "localhost"); console.log("Server running..."); app.get('/', function(req,res){ res.sendFile(__dirname+"/index.html"); }); io.sockets.on('connection', function(socket){ connections.push(socket); console.log('Connected: %s sockets connected', connections.length); //Disconect socket.on('disconnect', function(data){ connections.splice(connections.indexOf(socket), 1); console.log('Disconnected: %s sockets connected', connections.length); }); //Send message socket.on('send message', function(data){ console.log("Message Received"); io.sockets.emit('new message', data); }); }); 

这是我的index.html页面:

  <html> <head> <title>Chat Server</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> <link rel = "stylesheet" href="./style.css"> </head> <body> <div id="chat"></div> <form id="info"> <textarea placeholder="Message" col="50" id="message"></textarea> <input type = "submit" value="Send"></input> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect(); $(function(){ var socket = io.connect(); var messageForm = $("#info"); var message = $("#message"); var chat = $("#chat"); messageForm.submit(function(e){ e.preventDefault(); console.log("A message has been submited."); socket.emit('send message', message.val()); message.val(" "); }); socket.on('new message', function(data){ chat.append("<div class='chat-message'><div class='chat-user'>Max Braun</div><div class='chat-text'>"+data+"</div><div class=''>8/30/1999 at 8:33 PM</div></div>"); }); }); </script> </body> </html> 

柚木评论是正确的,套接字io在偏差模式暴露apipath/socket.io/socket.io.js在你的应用程序的主要根源,一旦你用电子包装应用程序,这将不再工作。 所以解决方法是修改套接字io客户端库的入口点,并将其replace为将包含在您的应用中的CDN或本地文件。

所以不是这个

  <script src="/socket.io/socket.io.js"></script> 

你可以把这个

 <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.8/socket.io.min.js"></script> 

希望能帮助到你 !