Javascript 在我的代码中,我试图创建房间,但我没有';I don’我不知道为什么每次它都用新房间来建造旧房间
这是我的server.js文件。在这里,我在每一个create上创建一个新房间 房间请求,然后将创建的房间推送到房间阵列中。 用户名和roomname是通过post请求从表单中获取的。但我不知道为什么它每次都用新的套接字id创建以前的所有房间 喜欢如果我第一次给它一个用户名:abc和roomname:room1,它将创建一个房间,然后下一次如果我创建一个带有新套接字连接的房间用户名:abc2和roomname:room2,它将再次首先创建旧房间(用户名:abc,roomname:room1),并增加房间数组长度,然后创建新房间(用户名:abc2,房间名称:room2)并增加房间数组的长度Javascript 在我的代码中,我试图创建房间,但我没有';I don’我不知道为什么每次它都用新房间来建造旧房间,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,这是我的server.js文件。在这里,我在每一个create上创建一个新房间 房间请求,然后将创建的房间推送到房间阵列中。 用户名和roomname是通过post请求从表单中获取的。但我不知道为什么它每次都用新的套接字id创建以前的所有房间 喜欢如果我第一次给它一个用户名:abc和roomname:room1,它将创建一个房间,然后下一次如果我创建一个带有新套接字连接的房间用户名:abc2和roomname:room2,它将再次首先创建旧房间(用户名:abc,roomname:room1),并
//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');
});
//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(端口,()=>{
log(`server正在端口号${port}`上运行);
})
常量io=套接字(服务器);
app.use(express.static(`${uu dirname}/public`);
app.set('view engine','ejs');
app.set('views',`${uu dirname}/views`);
use(bodyParser.urlencoded({extended:true}));
use(bodyParser.json());
出租房间=[];
功能推送室(房间、用户名称、房间名称){
出租房间={
姓名:roomname,
用户:[]
}
room.users.push(usernme);
房间。推(房间);
}
功能joinRoom(房间、roomjoinname、用户名){
for(设i=0;i{
res.render(“索引”);
})
//通过post请求从用户获取值
app.post('/chat',(请求、回复、下一步)=>{
io.on('连接',套接字=>{
console.log('makeasocketconnection'+socket.id);
让roomName=req.body.roomName;
让userName=req.body.userName;
让roomNameJoin=req.body.roomNameJoin;
pushRoom(房间、用户名、房间名称);
socket.join('roomName');
});
res.render(“聊天”);
});
重复添加的原因
这是因为每次用户访问/chat
页面时,您都会向socket.io服务器添加一个新的侦听器。因此,如果有3个用户访问了/chat
页面,则会为连接
事件注册3个事件侦听器。这意味着,当此时建立新的连接
时将执行stered侦听器,并将三个新房间推送到您的阵列中
消除不必要行为的建议
将文件室创建置于socket.io连接
事件处理程序之外,并将连接
处理程序注册置于HTTPpost
处理程序之外
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');
});