首页 > 解决方案 > 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...

标签: javascriptnode.jssocket.iovisual-web-developersocket.io-1.0

解决方案


您对您编写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', ...)


推荐阅读