2016-08-20 2 views
0

У меня есть сценарий входа на Node.js сервере, поэтому, когда пользователь входит в систему, я создаю новый объект для этого пользователя, например:Javascript сделать новый объект доступен во всех областях

// MOCK-UP: NOT ACTUAL CODE 

db.query('QUERY', function(err, rows, fields){ 

     if(!err){ 

      var User = new _User(row[0].id, row[0].name, ...); 
      // Continue on 

     } else { throw err } 

}); 

сейчас как я могу сделать это так, чтобы я все еще создавал новый объект _User каждый раз, когда кто-то регистрируется в и, делает его доступным по всему миру. Я хочу сохранить всю текущую пользовательскую информацию в классе и иметь возможность легко получить ее в любой момент времени, а также использовать все методы класса.

EDIT: Я не знаю, если только инициализацией var Player; где-то на самом верху хорошая идея, поскольку она будет перезаписана. Да, мне нужен совет :)

P.S.: скрипт входа находится в событии сокета, и я не против переписывать код, чтобы он соответствовал настройкам!

P.P.S: Я не хочу хранить информацию внутри сокета.

+0

Вы не можете использовать один глобальный язык для отслеживания пользователя в серверной среде, потому что все запросы пользователя обращаются к одному и тому же набору глобальных переменных, поэтому разные пользователи будут просто трогать данные друг друга. Здесь вы хотите заняться сеансом. Я бы предложил использовать Express и express-session. Это автоматически сделает объект сеанса для каждого пользователя доступным для всех обработчиков запросов. Затем вы можете сохранить все, что захотите, в этом объекте сеанса, и оно будет доступно только для запросов этого пользователя. – jfriend00

+0

@ jfriend00 Но то же самое с гнездом, правда? Это то, что я сейчас использую, но хотел бы иметь отдельный пользовательский класс. – Micard

+0

Я не знаю, что вы подразумеваете под «Но то же самое с сокетом, хотя, isnt'it?» Если сокет представляет собой соединение с пользователем, вы можете просто добавить свойство '.user' самому объекту сокета , – jfriend00

ответ

1

Если сокет представляет собой соединение с пользователем, вы можете просто добавить свойство socket._user самому объекту сокета. Если вы хотите использовать методы на своем объекте User, вы можете добавить прототип в конструктор User.

Смежные вопросы