1 回答

TA貢獻1809條經驗 獲得超8個贊
在v3.0.0的變更日志中,他們提到以下
Socket#rooms 現在是一個 Set 而不是一個對象
這意味著它現在是一個Map 對象而不是普通的 js 對象
因此,在 v3.0.3 中,您在記錄房間時會得到以下輸出,您無法像普通 js 對象一樣通過鍵訪問房間,而必須使用 .set() 來代替。
Map(2) {
? 'II-OqYrpZYtv2bKrAAAD' => Set(1) { 'II-OqYrpZYtv2bKrAAAD' },
? 'room1' => Set(1) { 'II-OqYrpZYtv2bKrAAAD' }
}
雖然我不知道如何向房間添加額外的變量。因為如果您運行以下代碼:
io.sockets.adapter.rooms.set(room, {
? variable: "Test variable"
})
它用新變量替換套接字 ID。我找不到任何關于他們希望我們如何使用這種新結構存儲變量的信息。
Map(2) {
? 'Xv6vbxuOgDuqp6dmAAAB' => Set(1) { 'Xv6vbxuOgDuqp6dmAAAB' },
? 'room1' => { variable: 'Test variable' }
}
當使用 v2.0.3 記錄房間時,您會得到一個正常的對象輸出,您可以使用 [key] 訪問該輸出。
{
? 'tVnQpZyKDglSf4J-AAAA': Room { sockets: { 'tVnQpZyKDglSf4J-AAAA': true }, length: 1 },
? room1: Room { sockets: { 'tVnQpZyKDglSf4J-AAAA': true }, length: 1 }
}
因此,如果您將 socket.io 恢復到 v2.0.3(最新的 2.xx 版本),您的代碼可以正常工作。
您可以通過運行以下命令來恢復 socket.io
npm i [email protected]
或者通過更改package.json中的版本號然后運行
npm install
添加回答
舉報