javascript - 找不到 Socket.io 404

标签 javascript node.js socket.io pug

出于某种原因,当我在 chrome 开发人员工具网络下查看时,我不断收到“http://127.0.0.1:3000/socket.io/socket.io.js”404 not found。我花了一个多小时试图理解为什么这不起作用,因为它之前工作正常而且我认为我没有改变任何东西。

服务器:

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);
}

最佳答案

改变这个:

app.listen(3000);

到:

server.listen(3000);

app.listen() 创建了一个新的不同的服务器,因此您连接到 socket.io 的服务器不是实际正在监听的服务器,因此您的 socket.io 服务器不是实时的如果脚本文件没有首先加载失败,则无法处理 /socket.io/socket.io.js 请求或传入连接。

有关 app.listen() 的作用以及为什么它不是您想要的代码布局方式的更多详细信息,请参阅此答案:

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


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

var app = express();
var server = app.listen(3000);
var io = require('socket.io')(server);

这与您的代码的结构不完全相同(但您可以重新安排事情以这种方式进行)。

关于javascript - 找不到 Socket.io 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44913881/

相关文章:

javascript - XMLHttpRequest 从远程主机获取 HTTP 响应

javascript - 以 javascript 格式获取当前日期和时间 : 2015-03-01 03:09:03

node.js - 停止服务器后连接socket.io增加

node.js - Socket.io 命名空间和房间 : cannot receive an event on a particular url with token

javascript - 将 Socket.io 与连接到同一服务器的多个客户端一起使用

javascript - 从表单更新 JSON 数组

javascript - 如何调用一组对象中同一列的属性? ( Node .js)

javascript - 点击圆圈游戏Javascript

javascript - Angular2 + Webpack : how to optimise vendor bundle

javascript - 数据未通过 MongoDB 集合