我正在使用 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', (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)
谁能帮忙纠正错误?
答案 0 :(得分:1)
看来你的socket函数顺序写错了
试试这个:
socket.broadcast.to(roomId).emit('user-connected', userId)
还有这个:
socket.broadcast.to(roomId).emit('user-disconnected', userId)
答案 1 :(得分:0)
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