[英]In my code i am trying to create rooms but i don't know why every time it create old rooms with new one
這是我的server.js文件。 在這種情況下,我將在每個創建房間的請求上創建一個新房間,然后將創建的房間推入Rooms數組。 用戶名和房間名是通過post request.Form來獲取的,但是我不知道為什么每次使用新的套接字ID都會創建所有以前的房間。 如果我第一次給它提供一個用戶名:abc和roomname:room1,它將創建一個房間,然后如果我下次使用新的套接字連接創建一個房間用戶名:abc2和roomname:room2,那么它將再次創建舊房間(用戶名:abc,房間名稱:room1),然后增加房間陣列的長度,然后創建新房間(用戶名:abc2,房間名稱:room2),並增加房間陣列的長度。
//server.js
const express = require('express');
const app = new express();
const socket = require('socket.io');
const bodyParser = require('body-parser');
const port = process.env.PORT || 8000;
const server = app.listen(port,() =>{
console.log(`server is running on the port number ${port}`);
})
const io = socket(server);
app.use(express.static(`${__dirname}/public`));
app.set('view engine','ejs');
app.set('views',`${__dirname}/views`);
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
let rooms = [];
function pushRoom(rooms,usernme,roomname){
let room = {
name:roomname,
users:[]
}
room.users.push(usernme);
rooms.push(room);
}
function joinRoom(rooms,roomjoinname,username){
for(let i=0 ; i<rooms.length ; i++){
if(rooms[i].name == roomjoinname){
rooms[i].users.push(username);
}
}
}
app.get('/',(req,res,next) =>{
res.render('index');
})
//taking values from user by post request
app.post('/chat',(req,res,next) =>{
io.on('connection',socket =>{
console.log('made a socket connection'+socket.id);
let roomName = req.body.roomName;
let userName = req.body.username;
let roomNameJoin = req.body.roomNameJoin;
pushRoom(rooms,userName,roomName);
socket.join('roomName');
});
res.render('chat');
});
這是因為每次用戶訪問/chat
頁面時,都會向socket.io服務器添加一個新的偵聽器。 因此,如果3個用戶訪問了/chat
頁面,則將為connection
事件注冊3個事件偵聽器。 這意味着當此時建立新connection
時,將執行3個注冊的偵聽器,並將三個新房間推送到您的陣列。
將您的房間創建置於socket.io connection
事件處理程序之外,並將connection
處理程序注冊置於HTTP post
處理程序之外。
app.post('/chat', (req,res,next) => {
let roomName = req.body.roomName;
let userName = req.body.username;
pushRoom(rooms,userName,roomName);
res.render('chat');
});
io.on('connection', socket => {
console.log('made a socket connection'+socket.id);
socket.join('roomName');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.