jquery - 使用 Electron 时无法加载socket.io.js文件

标签 jquery node.js socket.io electron

我正在尝试使用 Node.js 以及 Electron 和 Socket.io 制作一个聊天应用程序,但是当我尝试加载 /socket.io/socket.io.js 时,我总是收到错误:

Failed to load resource: net::ERR_FILE_NOT_FOUND

如果我只是在端口 3000 上启动服务器并输入

res.sendFile(__dirname+"/index.html");

然后可以加载socket.io.js,但是如果我使用 Electron 并放置

mainWindow.loadURL("File://"+__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>

最佳答案

柚木评论是正确的,开发模式下的socket io会在应用程序的主根公开一个api路由/socket.io/socket.io.js,一旦你用 Electron 打包应用程序不会再工作了。因此,解决方案是修改套接字 io 客户端库的入口点,并将其替换为 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>

希望对你有帮助!

关于jquery - 使用 Electron 时无法加载socket.io.js文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562812/

相关文章:

node.js - AWS Cloudformation - 如何将 sns 主题 arn 传递到堆栈?

node.js - 将 socketio 与 React Redux 结合使用

jquery - 如何抓取这个ajax网站并获取结果

jquery - 数据表:将搜索框定位到右上角

javascript - 没有将数据添加到数据库中,也没有显示在使用 AJAX 和 PHP 追加的表中

javascript - 使用javascript获取windows用户名

node.js - Firmata、Arduino和Node js之间的关系

html - 使用http获取html表单数据

android - 套接字 IO runOnUiThread 不起作用

javascript - Node.js 工作正常,除非直接使用 localhost