Javascript 在客户端上找不到socket.io.js

Javascript 在客户端上找不到socket.io.js,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,这个问题以前被问过,但在以前的答复中没有找到任何解决方案 Socket.IO给了我两个问题: 服务器端给出了此错误-错误-侦听EACESS 我阅读了stackoverflow,并通过发出sudo命令启动服务器解决了这个问题 现在clientside似乎没有按照脚本行找到socket.io.js文件- 我知道使用ChromeDeveloperTools控制台找不到文件,该控制台在文件上有404错误 我听说这个文件是在动态服务器上创建的。但我在根文件夹上做了一个“ls-a”。找不到socket.i

这个问题以前被问过,但在以前的答复中没有找到任何解决方案

Socket.IO给了我两个问题:

  • 服务器端给出了此错误-错误-侦听EACESS 我阅读了stackoverflow,并通过发出sudo命令启动服务器解决了这个问题
  • 现在clientside似乎没有按照脚本行找到socket.io.js文件-

  • 我知道使用ChromeDeveloperTools控制台找不到文件,该控制台在文件上有404错误

    我听说这个文件是在动态服务器上创建的。但我在根文件夹上做了一个“ls-a”。找不到socket.io/socket.io.js文件

    有什么想法吗

    这里是我的服务器代码供参考-

    var http = require('http'),
      path = require("path"),
      url = require("url"),
      fs = require("fs"),
      mime = require("mime"),
      io = require("socket.io").listen(server);
    var homepath = ".";
    var server = http.createServer(function (req, res) {
      var uri = url.parse(req.url).pathname;
      var filepath = path.join(homepath, uri);
      console.log(filepath);
      path.exists(filepath, function (exists) {
        if (!exists) {
          //404 response
          res.writeHead(404, {
            "Content-Type": "text/plain"
          });
          res.write("404 File not Found \n");
          res.end();
        } else {
          if (fs.statSync(filepath).isDirectory()) {
            filepath += '/index.html';
            filepath = path.normalize(filepath);
          }
          fs.readFile(filepath, "binary", function (err, data) {
            if (err) {
              res.writeHead(500, {
                'Content-Type': 'text/plain'
              });
              res.write('500 File read error \n');
              res.end();
            } else {
              var contentType = mime.lookup(filepath);
              res.writeHead(200, {
                'Content-Type': contentType
              });
              res.write(data, 'binary');
              res.end();
            }
          });
        }
      });
      //sockets part starts here
      io.sockets.on('connection', function (socket) {
        socket.on('test', function (data) {
          console.log('i got something');
          console.log(data.print);
        });
      });
    });
    server.listen(3000);
    server.on('error', function (e) {
      console.log(e);
    });
    console.log('Server listening on Port 3000');
    

    您需要的客户机文件位于node_modules文件夹中,如下所示:

    node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
    
    不过Socket.io应该提供此文件,所以您不需要将其复制到其他地方。例如,如果您正在以下服务器上运行socket.io服务器:

    http://localhost:5000
    
    然后,脚本将从以下位置送达:

    http://localhost:5000/socket.io/socket.io.js
    
    如果您正在从另一个应用程序或另一个端口使用socket.io,那么代码示例中的相对URL将不起作用。您需要手动包含客户端脚本,或者尝试包含客户端节点模块(如果由节点应用程序使用)

    您可以在此处查看客户端存储库以了解更多信息:

    这里的问题是,您告诉Socket.IO在一个尚不存在的服务器上侦听,导致出现
    EACCES
    ,因此无法为客户端文件提供服务。这就是你正在做的:

    // the HTTP server doesn't exist yet
    var io = require('socket.io').listen(server);
    var server = http.createServer();
    
    如果您在服务器端错误控制台中看到,您会看到:

    info: socket.io started
    warn: error raised: Error: listen EACCES
    
    要解决此问题,请在创建服务器后将侦听功能移动到:

    var server = http.createServer();
    var io = require('socket.io').listen(server);
    

    一旦Socket.IO正确侦听,它将自动将客户端文件发送到
    /Socket.IO/Socket.IO.js
    。您不需要手动查找或提供它。

    您是使用npm安装的吗?是的,我是通过npm安装的。我只使用node.js。端口是3000。但是我已经在nodejs中手动创建了一个文件服务器,没有使用express。因此,服务器代码将尝试查找位于socket.io/socket.io.js的文件,但找不到该文件。那么事情会怎样呢?socket.io/socket.io.js的磁盘上没有文件。socket.io从不同的位置动态地提供服务(请参见此处的方法)。如果您自己处理它,它可能永远无法访问socket.io来处理此请求。