【问题标题】:cannot read property 'emit' of undefined socketio无法读取未定义 socketio 的属性“emit”
【发布时间】:2021-06-27 16:59:14
【问题描述】:

我正在使用 socket.io 构建一个项目。 运行时出现错误“TypeError: Cannot read property 'emit' of undefined”。

服务器代码如下:

server.js

const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = require('socket.io')(server)
const { v4: uuidV4 } = require('uuid')

app.set('view engine', 'ejs')
app.use(express.static('public'))

app.get('/', (req, res) => {
  res.redirect(`/${uuidV4()}`)
})

app.get('/:room', (req, res) => {
  res.render('room', { roomId: req.params.room })
})

io.on('connection', socket => {
  socket.on('join-room', (roomId, userId) => {
    socket.join(roomId)
    socket.to(roomId).broadcast.emit('user-connected', userId)

    socket.on('disconnect', () => {
      socket.to(roomId).broadcast.emit('user-disconnected', userId)
    })
  })
})

server.listen(3000)

谁能帮忙改正错误?

【问题讨论】:

    标签: node.js socket.io webrtc serversocket


    【解决方案1】:

    看来你的socket函数写错了

    试试这个:

    socket.broadcast.to(roomId).emit('user-connected', userId)
    

    还有这个:

      socket.broadcast.to(roomId).emit('user-disconnected', userId)
    

    【讨论】:

      【解决方案2】:
      • 如果您收到此错误,我假设您正在执行此操作 视频教程How To Create A Video Chat App With WebRTC
      • 在本教程中,Kyle 使用的是socket.io 版本2.0.3
      • 您遇到了问题,因为您可能使用的是套接字版本'4.0.1'。 显然在这个版本中,broadcast 属性不再是 可用/已被删除,这就是您收到上述 TypeError 的原因。
      • 同时在io 对象上调用'to()' 方法,而不是socket 对象。

      解决方案:

      替换这个:

      socket.to(roomId).broadcast.emit('user-connected', userId)
      

      有了这个:

      io.to(roomId).emit('user-connected', userId);
      

      有关详细信息,请参阅此文档:Socket.io rooms

      【讨论】:

        猜你喜欢
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 2020-04-06
        • 2020-10-30
        • 2019-10-09
        • 1970-01-01
        相关资源
        最近更新 更多