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

时间:2013-10-14 13:58:41

标签: javascript node.js socket.io

此问题先前已被提出,但在之前的回复中未找到任何解决方案。

Socket.IO给了我两个问题:

  1. 服务器端发出此错误 - 错误 - 收听EACESS 我读了stackoverflow并通过发出sudo命令来启动服务器来解决这个问题。
  2. 现在客户端似乎没有根据脚本行找到socket.io.js文件 -

  3. 我理解使用Chrome开发人员工具控制台找不到文件,该控制台在文件上有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');
    

2 个答案:

答案 0 :(得分:5)

这里的问题是你告诉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

要解决此问题,请在创建服务器后将listen功能移至:

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

一旦Socket.IO正确侦听,它将自动将客户端文件提供给/socket.io/socket.io.js。您无需找到它或手动提供它。

答案 1 :(得分:2)

您需要的客户端文件位于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将不起作用。您需要手动包含客户端脚本或尝试包含客户端节点模块(如果由节点应用程序使用)。

您可以在此处查看客户端存储库以获取更多信息: https://github.com/LearnBoost/socket.io-client