我正在使用socket.io构建一个项目。在运行时得到错误"0";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', (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)
有人能帮忙纠正这个错误吗?
您的套接字函数似乎是按错误的顺序编写的
试试这个:
socket.broadcast.to(roomId).emit('user-connected', userId)
这个:
socket.broadcast.to(roomId).emit('user-disconnected', userId)
- 如果您收到这个错误,我假设您遵循的是视频教程如何使用WebRTC创建视频聊天应用程序
- 在本教程中,Kyle使用
socket.io
版本2.0.3
- 由于您可能使用的是
'4.0.1'
版本的套接字,因此您正面临问题。显然,在这个版本中,broadcast
属性不再是available/已被删除,这就是您收到上述TypeError的原因 - 也可以在
io
对象上调用'to()'
方法,而不是在socket
对象上调用
解决方案:
替换此:
socket.to(roomId).broadcast.emit('user-connected', userId)
有了这个:
io.to(roomId).emit('user-connected', userId);
欲了解更多信息,请参阅以下文档:Socket.io房间