Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
160 views
in Technique[技术] by (71.8m points)

javascript - TypeError: Cannot read property 'room' of undefined

I use socketIO to create chat with room and namespace. It works very well but sometimes I'm facing an error in log and I don't know why... maybe when too much inputs/outputs ?

TypeError: Cannot read property 'room' of undefined at Socket.socket.on (/appli/chatvideodiff/server/server.js:107:48)

see below piece of my code :

var fs = require('fs');
const cmd = require('child_process');
const express = require('express');
const path = require('path');
const http = require('http');
const https = require('https');
const socketIO = require('socket.io');
const url = require('url');

var {Message} = require('./utils/message');
const {isRealString} = require('./utils/validation');
const {Users} = require('./utils/users');

const dotenv = require('dotenv');
dotenv.config();

var options = {
    
    key: fs.readFileSync(process.env.KEY),
    cert: fs.readFileSync(process.env.CERT),
    ca: fs.readFileSync(process.env.CA),
    index: false,
    setHeaders: function (res, path, stat) {
        res.set('x-timestamp', Date.now());
    },
};

const port = process.env.PORT || 3000;
const publicPath = path.join(__dirname, '../public');
var app = express();

var server = http.createServer(options, app);

var io = socketIO(server);

var users = new Users();
var messages = new Message;

var viewersCount = [];

app.use(express.static('../public', options));

app.get('/chat/:room', function (req, res) {
  var room = req.params.room;
  var fqdn = req.headers.host;
  var proto =  process.env.PROTO;
  var lien = proto + '://' + fqdn+'/index.html?room=' + room;
  res.redirect(lien);

});

const io_chat = io.of("/chat").on('connection', (socket) => {
  console.log("New user connected on chat from "+socket.handshake.headers['x-forwarded-for']);

  socket.on('join', (params, callback) => {
    if (!isRealString(params.name) || !isRealString(params.room)) {
      var destination = '/urlincorrecte';
      socket.emit('redirect', destination);
      return false;
    }

    socket.join(params.room);
    users.removeUser(socket.id);

    users.addUser(socket.id, params.name, params.room, socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address);
    io_chat.to(params.room).emit('updateUserList', users.getUserList(params.room));

    var user = users.getUser(socket.id);
    var msgJoin = messages.getMessageList(user.room);   <== issue on this line

    if (user !== undefined) {
      socket.emit('history', msgJoin);
    } else {
    }
  callback();
  });
...

error line is this one (near the end) : var msgJoin = messages.getMessageList(user.room);

if you have an idea, thanks Nico

question from:https://stackoverflow.com/questions/65924147/typeerror-cannot-read-property-room-of-undefined

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...