找不到Socket.io 404

时间:2017-07-04 20:54:12

标签: javascript node.js socket.io pug

出于某种原因,当我查看chrome developer tools网络时,我发现找不到“http://127.0.0.1:3000/socket.io/socket.io.js”404。我花了一个多小时试图理解为什么这不起作用,因为之前工作正常,我认为我没有改变任何东西。

服务器:

var express = require('express'),
    session = require('express-session');

var app = express();

var server = require('http').Server(app);
var io = require('socket.io')(server);
var MongoStore = require('connect-mongo')(session);

var sessionMiddleware = session({
    resave: false,
    saveUninitialized: false,
    secret: 'secret',
    store: new MongoStore({url: "mongodb://localhost:27017/database"})
});

app.use(sessionMiddleware);



io.use(sessionMiddleware, function(socket, next) {
    sessionMiddleware(socket.request, socket.request.res, next);
});

io.sockets.on('connection', function (socket) {
    console.log("Socket connected");
});

app.set('view engine', 'pug');
app.use(express.static(__dirname + '/public'));

app.get('/', function(req, res) {
   res.render('index');
});

app.listen(3000);
console.log('listening');

帕格文件:

html
    head
        script(src="http://127.0.0.1:3000/socket.io/socket.io.js")
        script(type='text/javascript', src='../javascripts/chat.js')
    body

客户端javascript:

try {
    var socket = io.connect('http://127.0.0.1:3000');

} catch(e) {
    console.log(e);
}

1 个答案:

答案 0 :(得分:7)

改变这个:

app.listen(3000);

为:

server.listen(3000);

app.listen()创建一个新的不同的服务器,因此连接到socket.io的服务器不是实际监听的服务器,因此你的socket.io服务器不活动而且无法处理{ {1}}请求或传入连接,如果脚本文件没有首先加载失败。

请参阅此答案,详细了解/socket.io/socket.io.js的作用以及为什么它不符合您的代码布局方式:

websockets, express.js and can’t establish a connection to the server

注意,您可以使用app.listen(),但是您必须不创建自己的服务器,并且必须从app.listen()捕获返回值并将其用作服务器传递给socket.io初始化:

app.listen()

您的代码的结构并不完全(但您可以通过这种方式重新排列代码)。