Error: "disconnect" is a reserved event name, why am I getting this error?
Error: "disconnect" is a reserved event name, why am I getting this error?
我正在使用 React、node.js 和 socket.io 构建聊天应用程序。
我有以下用于连接和断开连接的钩子
useEffect(() => {
const { name, room } = queryString.parse(location.search)
socket = io(ENDPOINT)
setRoom(room)
// New user joins room
socket.emit('join', { name, room }, (userNamesPresent, error) => {
setUsersPresent(userNamesPresent.userNamesPresent)
})
return () => {
// User leaves room
socket.emit('disconnect')
socket.off()
}
}, [ENDPOINT, location.search])
我在节点中这样处理它
io.on("connection", socket => {
socket.on("join", ({ name, room }, callback) => {
const { error, user } = addUser({id: socket.id, name, room})
if(error) {
return callback({error})
}
// Emitting a welcome message
socket.emit('message', {user: 'admin', text: `Welcome to the chat ${user.name}`})
// Broadcasting to everyone except the connecting user
socket.broadcast.to(user.room).emit('message', {user: 'admin', text: `${user.name} has joined ${user.room}`})
socket.join(user.room)
// Get the users in room
const usersPresent = getUsersInRoom(user.room)
const userNamesPresent = usersPresent.map(user => {
return {name: user.name}
})
callback({userNamesPresent})
})
socket.on('message-sent', (message, callback) => {
console.log(socket.id)
const user = getUser(socket.id)
io.to(user.room).emit('message', {user: user.name, text: message} )
callback()
})
socket.on("disconnect", () => {
console.log("User has disconnected")
removeUser(socket.id)
})
})
当我离开页面(例如返回上一页)时,出现以下错误
根据 docs,而不是在 useEffect
的清理函数中执行 socket.emit('disconnect')
,因为 disconnect
是 中的保留事件名称Socket.io,可以用socket.disconnect()
.
我正在使用 React、node.js 和 socket.io 构建聊天应用程序。
我有以下用于连接和断开连接的钩子
useEffect(() => {
const { name, room } = queryString.parse(location.search)
socket = io(ENDPOINT)
setRoom(room)
// New user joins room
socket.emit('join', { name, room }, (userNamesPresent, error) => {
setUsersPresent(userNamesPresent.userNamesPresent)
})
return () => {
// User leaves room
socket.emit('disconnect')
socket.off()
}
}, [ENDPOINT, location.search])
我在节点中这样处理它
io.on("connection", socket => {
socket.on("join", ({ name, room }, callback) => {
const { error, user } = addUser({id: socket.id, name, room})
if(error) {
return callback({error})
}
// Emitting a welcome message
socket.emit('message', {user: 'admin', text: `Welcome to the chat ${user.name}`})
// Broadcasting to everyone except the connecting user
socket.broadcast.to(user.room).emit('message', {user: 'admin', text: `${user.name} has joined ${user.room}`})
socket.join(user.room)
// Get the users in room
const usersPresent = getUsersInRoom(user.room)
const userNamesPresent = usersPresent.map(user => {
return {name: user.name}
})
callback({userNamesPresent})
})
socket.on('message-sent', (message, callback) => {
console.log(socket.id)
const user = getUser(socket.id)
io.to(user.room).emit('message', {user: user.name, text: message} )
callback()
})
socket.on("disconnect", () => {
console.log("User has disconnected")
removeUser(socket.id)
})
})
当我离开页面(例如返回上一页)时,出现以下错误
根据 docs,而不是在 useEffect
的清理函数中执行 socket.emit('disconnect')
,因为 disconnect
是 中的保留事件名称Socket.io,可以用socket.disconnect()
.