如何解决无法读取未定义 socketio 的属性“emit”
我正在使用 socket.io 构建一个项目。 运行时出现错误“TypeError:无法读取未定义的属性‘emit’”。
服务器代码如下:
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',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)
谁能帮忙纠正错误?
解决方法
看来你的socket函数顺序写错了
试试这个:
socket.broadcast.to(roomId).emit('user-connected',userId)
还有这个:
socket.broadcast.to(roomId).emit('user-disconnected',userId)
,
- 如果您收到此错误,我假设您正在关注此 视频教程How To Create A Video Chat App With WebRTC
- 在本教程中,Kyle 使用的是
socket.io
版本2.0.3
- 您遇到了问题,因为您可能使用的是套接字版本
'4.0.1'
。 显然在这个版本中,broadcast
属性不再是 可用/已被删除,这就是您收到上述 TypeError 的原因。 - 还要对
'to()'
对象而不是io
对象调用socket
方法。
解决方案:
替换这个:
socket.to(roomId).broadcast.emit('user-connected',userId)
有了这个:
io.to(roomId).emit('user-connected',userId);
有关更多信息,请参阅此文档:Socket.io rooms
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。