socket.io 未定义并拒绝连接

Posted

技术标签:

【中文标题】socket.io 未定义并拒绝连接【英文标题】:socket.io undefined and refusing connection 【发布时间】:2022-01-14 18:03:17 【问题描述】:

我正在使用 socket.io 来显示一条消息,但是当我运行 node server.js 时,它不会在控制台记录任何输出消息。我已附加了我的 chat.html、server.js 和 main.js 文件以显示 socket.io 代码。

聊天.html

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

server.js

const http = require('http'); 
const express = require('express');
const socketio = require('socket.io'); 

const app = express();
const server = http.createServer(app); 
const io = socketio(server); 

app.use(express.static(path.join(__dirname, 'public')));

io.on('connection', (socket) => 
    
    console.log('New web socket connection...'); 
    socket.emit('message', 'Welcome to Chat Room!');
    
); 


const PORT = 54159 || process.env.PORT; 

server.listen(PORT, () => console.log(`Server running on port $PORT`)); 

main.js const socket = io();

【问题讨论】:

您是否检查了浏览器开发控制台以查看您的网页中是否存在脚本错误或加载错误?您的某个脚本似乎没有正确加载到网页中,因此没有 socket.io 连接。 我很困惑如何做到这一点。我在谷歌浏览器中将端口定义为 58228,但在我正在执行代码的括号中,它说本地主机是 8123。此外,当我加载它时,它有时会切换端口,所以我对如何解决这个问题感到困惑。 我添加了一张我遇到的错误的图片。我很困惑,请帮助! 好吧,客户端必须知道您在哪个端口上运行。如果它不知道端口,则无法连接到您的服务器。 看来54159 不是您服务器的正确端口,这就是您在这里使用的端口:&lt;script src="http://localhost:54159/socket.io/socket.io.js"&gt;&lt;/script&gt; 所以socket.io 无法正确加载。您使用什么 URL 在浏览器中加载网页?这似乎有正确的端口,因为main.js 似乎正在运行。 【参考方案1】:

好的,我想我会总结一下我们在 cmets 中交换的建议更改:

改变这个:

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

到这里:

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

这消除了您指定端口的需要(无论如何都是不正确的)。


变化:

/public/chat.html

到:

/chat.html

使其与您的express.static() 行正在查找的位置相匹配。要使/public/chat.html 工作,chat.html 必须位于服务器硬盘驱动器上的public/public/chat.html 中,但我认为它不是,它很可能在public/chat.html 中。您的express.static() 行指向public,因此这是它所查看的树的顶部。URL 中的任何其他路径都与该路径相关。


而且,每当您对客户端或服务器代码进行更改时,请确保并重新启动您的服务器,以确保所有最近的更改都在使用中。


如果您完全不确定您的服务器在哪个端口上运行,那么在您的服务器启动时查看此结果:

console.log(`Server running on port $PORT`)

这会告诉你移植它的运行。括号日志对端口的引用可能是连接到 nodejs 调试器的括号,该调试器将位于与您的 Web 服务器不同的端口上。

【讨论】:

以上是关于socket.io 未定义并拒绝连接的主要内容,如果未能解决你的问题,请参考以下文章

angular-socket-io io 未定义

socket.io,io 未定义(JS 错误)

Node.js socket.io.js 未找到或 io 未定义

Node.js - Socket.io:socket.request 未定义

Socket.IO 命名空间,调用未定义函数 .of()

socket.io - ReferenceError:未定义套接字