【问题标题】:Socket.io version 2.1.0 error 404Socket.io 版本 2.1.0 错误 404
【发布时间】:2018-05-14 11:04:22
【问题描述】:

我使用 socket.io 最新版本发现了这个错误:“index.js: 83 POST http: //localhost/socket.io/?EIO = 3 & transport = polling & t = MDUHEO9 404 (Not Found)”。 我明白原因:真实地址一定是http://localhost:3000/socket.io/。 你知道我该如何纠正吗?

我看了很多讨论,但没有人有适合2.1.0版本的解决方案,即使在讨论中我读到降级提案,我也想避免它。

client.js:

<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
  $(function () {
    var socket = io().connect('http://localhost:3000');
    $('form').submit(function(){
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
      return false;
    });
    socket.on('chat message', function(msg){
      $('#messages').append($('<li>').text(msg));
    });
  });
</script>

server.js:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

【问题讨论】:

  • 你能证明你是在你的html中添加socket.io js文件吗?以及您如何从后端提供服务
  • @GeorgeBailey 感谢您的关注:我添加了代码。

标签: javascript node.js socket.io


【解决方案1】:

改变这个:

var socket = io().connect('http://localhost:3000');

到这里:

var socket = io.connect('http://localhost:3000');

或者到这个:

var socket = io('http://localhost:3000')

最后两个都是一样的。


您将只想使用一种形式的连接,io(...)io.connect(...),而不是两者。当您仅调用io() 时,您正在尝试连接到默认 URL,该 URL 将是当前网页的 URL,然后当您尝试在此之后也执行 .connect() 时,您正在尝试再次连接。您只需要一个连接并连接到指定的 URL。

【讨论】:

    【解决方案2】:

    这里的问题是您已经为服务器socket.io 客户端文件定义了任何端点。这就是您收到404 的原因。

    如果您使用npm 安装,您只需添加以下行即可允许 express 为您提供此类静态文件的服务器

    app.use(express.static(__dirname + '/node_modules'));  
    

    如果你已经用 bower 安装了 socket.io,请使用

     app.use(express.static(__dirname + '/node_modules'));  
    

    或者您可以将 socket.io 的客户端库放置在任何位置,并根据请求提供文件,例如

    app.get('/socket.io', function(req, res){
      res.sendFile("Path to socket.io.js file");
    });
    

    而且你不需要在里面写完整的地址

    <script src="http://localhost:3000/socket.io/socket.io.js"></script>
    

    随便用

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

    【讨论】:

    • 使用您提出的代码,出现另一个错误:“ReferenceError: express is not defined”或“GET http://localhost/socket.io/socket.io.js 404 (Not Found) " 取决于使用的代码。但是我使用 npm 安装它。
    • 删除var app = require('express')();行并添加var express = require('express'); var app = express();
    • 不幸的是错误仍然存​​在,我再次尝试了所有可能的方法,但仍然没有。
    • 只需检查它是否适用于为 socket.io 客户端添加cdn 链接// 类似于&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.js"&gt;&lt;/script&gt;
    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    相关资源
    最近更新 更多