Socket.io版本2.1.0错误404

时间:2018-05-14 11:04:23

标签: javascript node.js socket.io

我使用socket.io最新版本发现了这个错误:" index.js:83 POST http://localhost/socket.io/? EIO = 3& transport = polling& t = MDUHEO9 404(未找到)"。 我理解原因:真正的地址必须是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);
  });
});

2 个答案:

答案 0 :(得分:1)

此处的问题是您已将任何端点定义为服务器socket.io客户端文件。这就是你获得404的原因。

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

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

如果你已经用凉亭安装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>

答案 1 :(得分: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()时,您尝试连接到默认网址,该默认网址是当前网页的网址,然后当您尝试在此之后再.connect()时,您就是&# 39;重新尝试连接。您只需要一个连接和指定的URL。