Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在我的代码中,我试图创建房间,但我没有';I don’我不知道为什么每次它都用新房间来建造旧房间_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 在我的代码中,我试图创建房间,但我没有';I don’我不知道为什么每次它都用新房间来建造旧房间

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文件。在这里,我在每一个create上创建一个新房间 房间请求,然后将创建的房间推送到房间阵列中。 用户名和roomname是通过post请求从表单中获取的。但我不知道为什么它每次都用新的套接字id创建以前的所有房间 喜欢如果我第一次给它一个用户名:abc和roomname:room1,它将创建一个房间,然后下一次如果我创建一个带有新套接字连接的房间用户名:abc2和roomname:room2,它将再次首先创建旧房间(用户名:abc,roomname: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');
});
//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
连接
事件处理程序之外,并将
连接
处理程序注册置于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');
});