javascript - ReferenceError: Socket is not defined .....使用 Socket.io 创建节点服务器时
问题描述
我正在使用 Node JS 创建一个聊天应用程序,我一直在使用 Socket.Io 库在客户端和 Web 服务器之间建立双向连接。
这是我的代码(创建节点服务器):
// Node Server that will handle Socket io connections
const io = require('socket.io')(3000) // Requiring the socket io Library
const users = {};
io.on("connections", (socket) => {
socket.on("new-user-joined", (name) => {
users[socket.id] = name;
socket.broadcast.emit("user-joined", name)
});
});
socket.on('send', message =>{
socket.broadcast.emit('recieve', {message: message, name: users[socket.id]});
});
我的节点服务器停止并显示此错误:
问题:
PS C:\Users\SANKET PRAKHER\Desktop\complete web development bootcamp\Chat Application\Node Server> nodemon .\index.js
[nodemon] 2.0.6
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node .\index.js`
C:\Users\SANKET PRAKHER\Desktop\complete web development bootcamp\Chat Application\Node Server\index.js:14
socket.on('send', message =>{
^
ReferenceError: socket is not defined
at Object.<anonymous> (C:\Users\SANKET PRAKHER\Desktop\complete web development bootcamp\Chat Application\Node Server\index.js:14:1)
at Module._compile (internal/modules/cjs/loader.js:1015:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
at Module.load (internal/modules/cjs/loader.js:879:32)
at Function.Module._load (internal/modules/cjs/loader.js:724:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
at internal/main/run_main_module.js:17:47
[nodemon] app crashed - waiting for file changes before starting...
解决方案
您对您编写socket.on('send', ...
的变量套接字的引用完全超出了其scoket
本身是已定义变量的范围。此变量仅在您作为io.on
调用的第二个参数提供的函数中定义,并且通常应该在那里引用。该函数将其作为socket
顺便命名的参数。
因此,您应该在该函数中携带您的 scoket.on 代码块:
io.on("connections", (socket) => {
socket.on("new-user-joined", (name) => {
users[socket.id] = name;
socket.broadcast.emit("user-joined", name)
});
socket.on('send', message => {
socket.broadcast.emit('recieve', {message: message, name: users[socket.id]});
});
});
就像你为socket.on('new-user-joined', ...)
推荐阅读
- c - 为什么我在 macOS Catalina 的 /usr/lib/libSystem.dylib 文件中找不到“printf”?
- python - 'int' 类型的参数不是需要可迭代的帮助
- dialogflow-es - Dialogflow 中的 Twilio(文本消息)
- named-entity-recognition - spacy - 3.1 自定义损失函数和数据增强,用于不平衡数据的命名实体识别
- java - Kucoin Api KC-API-PASSPHRASE 无效
- ambassador - 大使服务和代理有什么区别?
- vertex-shader - deck.gl - 项目(着色器模块)
- python - 添加到从文件读取的值时,获取“只能将 str(而不是“int”)连接到 str”
- c++ - 减少从一个城市跑到不同站点的公交车的重叠计数直线,我目前的做法可以优化吗?
- c++ - 可以使用宏来简写函数调用吗?C++