I make a game with socket.io and nodejs and I create a module called rooms.js, this module requires the users.js and fiveSocket.js but when I call Rooms.New from the main server file, it says fiveSocket is undefined, same problem when Rooms.New calls Rooms.New function, I got TypeError: Cannot read property 'getSocketIDbyId' of undefined
rooms.js:
var mysql = require('../mysql/mysql.js'); var headers = require('./headers.js'); var users = require('./users.js'); var fiveSocket = require('./sockets.js'); var Rooms = { Obj: {}, Room: function(data) { var room = this; this.name = data.name; this.users = []; this.floorCode = data.floor; this.description = data.desc; this.maxUsers = data.maxUsers; this.owner = data.owner; this.setTime = new Date().getTime(); this.dbID = data.dbID; this.doorx = data.doorx; this.doory = data.doory; this.doordir = data.doordir; }, New: function(socketID, roomID) { var keys = Object.keys(Rooms.Obj).length; var id = keys + 1; var callback = function(row) { fiveSocket.emitClient(socketID, headers.roomData, { title: row.title, desc: row.description, mapStr: row.floorCode, doorx: row.doorx, doory: row.doory, doordir: row.doordir }); var uid = users.getIdBySocketID(socketID); users.Obj[uid].curRoom = roomID; var rid = Rooms.getIdByDbID(roomID); Rooms.Obj[rid].users.push(uid); } if(Rooms.getIdByDbID(roomID) != false) { var room = Rooms.getIdByDbID(roomID); var row = { title: room.name, description: room.description, floorCode: room.foorCode, doorx: room.doorx, doory: room.doory, doordir: room.doordir }; callback(row); } else { mysql.Query('SELECT * FROM rooms WHERE id = ? LIMIT 1', roomID, function(rows) { if(rows.length > 0) { var row = rows[0]; Rooms.Obj[id] = new Rooms.Room({name: row.title, floorCode: row.floorCode, desc: row.description, maxUsers: row.maxUsers, owner: row.owner, dbID: row.id, doorx: row.doorx, doory: row.doory, doordir: row.doordir}); callback(row); } }); } }, removeUser: function(DBroomID, userID) { var rid = Rooms.getIdByDbID(DBroomID); var room = Rooms.Obj[rid]; var index = room.indexOf(userID); if (index > -1) array.splice(index, 1); }, Listener: function(users) { setInterval(function(){ for(var roomID in Rooms.Obj) { var room = Rooms.Obj[roomID];
EDIT: (if that might be helpful)
When I console.log fiveSocket in the main file 
When I console.log fiveSocket in rooms.js file 
EDIT2: When I removed var users = require('./users.js'); from fiveSocket , when I console.log it in rooms.js works, why?
EDIT3: I still have a problem
If you need other modules, sources:
Users JS: http://pastebin.com/Ynq9Qvi7
.JS sockets http://pastebin.com/wpmbKeAA