【发布时间】:2018-12-28 23:43:23
【问题描述】:
我正在尝试在 client.js 文件中创建一个套接字来与我的服务器通信。我按照官方文档(https://socket.io/docs/#Using-with-Express)没有成功。基本上当我像这样初始化我的套接字时:
var socket = io();
我希望我的服务器会收到一条消息(例如“用户已连接”),但什么也没有出现,让我假设连接永远不会发生。
这是一个在 Glitch 上制作的项目。我尝试遵循 socket.io 文档、简单示例或其他问题提示。在实例化套接字和 cdn 之前,我都尝试了建议的脚本。
//server.js
//dependencies
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
//listening to the port
http.listen(process.env.PORT || 3000, () => {
console.log("Listening on port " + process.env.PORT);
});
io.on('connection', function(socket){
console.log('A user has connected.');
});
//chat.html
//this is called right before </body>
<script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js'></script>
<script src='/socket.io/socket.io.js'></script>
<script src='/public/client.js'></script>
//client.js
var socket = io();
client.js 已按预期加载(并且控制台不会引发任何错误),但我看不到“用户已连接”,正如我所期望的那样。
你可以在这里查看完整的源代码https://glitch.com/edit/#!/farlokko-advanced-node
谢谢。
更新:
问题是 passport.socketio 模块的错误初始化,它干扰了icket.io。主要问题可能是存储错误(memoryStore 而不是 mongo-store)和 cookie 的错误键(express.sid 而不是 connect.sid)。
最后套接字初始化没问题,必须是 io.connect("host here")。
【问题讨论】: