В приложении Node.js/Express.js необходимо внести конкретные изменения в объект модели ES6 AppUser
, чтобы первичный ключ name
всегда быть уникальным?Уникальный первичный ключ для ES6 Node.js/Express.js Объект модели
В контексте пользователь аутентифицируется отдельным сервером авторизации OAuth2, поэтому данное приложение-клиент Node.js/Express.js никогда не будет хранить информацию пользователя в локальной базе данных. Следовательно, экземпляр AppUser
будет существовать только в памяти и будет временным владельцем информации о пользователе. Мы не можем полагаться на хранилище данных, например MongoDB, для обеспечения первичного ключа, поскольку пользователь не локально сохраняется.
Вот код для appuser.js
файла, который был добавлен в the app/models
directory of this GitHub sample app для целей тестирования:
'use strict';
module.exports = class AppUser {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
getSomeOther() {
return this.someOther;
}
setSomeOther(other) {
this.someOther = other;
}
}
А вот пример кода, который создает новый экземпляр AppUser
в другом месте в приложении:
var AppUser = require("./models/appuser.js");
...
var newUser = new AppUser(uname);
вам нужно будет где-то хранить имена пользователей. обновляете ли вы модель на сервере авторизации OAuth2 для принудительного использования уникального ключа или сохранения имен пользователей с вашего сервера клиентских приложений. Если вы не можете получить доступ к серверу auth, то лучше всего сохранить каждое имя, используемое в базе данных, а затем запросить db перед аутентификацией, чтобы убедиться, что оно уникально. –
@realseanp Проблема заключается в том, что пользователю Node.js необходимо временно хранить различную информацию, которая не должна сохраняться нигде, например, токены и т. Д. Поэтому я предполагаю, что ваш подход потребует не только класса «LocalUser» с одной единственной ' username', но также и некоторый другой класс для хранения данных «переходных» для пользователя, который не нуждается в сохранении. Это кажется запутанным исправлением. В Java существует возможность просто получить все экземпляры класса в памяти и получить доступ к ним по отдельности с помощью первичных ключей. Есть ли способ Node.js для повторения экземпляров класса? – FirstOfMany
Вы можете временно хранить данные в сеансе, используя модуль экспресс-сессии https://github.com/expressjs/session. Я бы подумал, что имена пользователей должны будут постоянно сохраняться, и для вас потребуется модель «LocalUser», как вы сказали. express-session хранит сеансы в памяти по умолчанию, но они отмечают, что это не подходит для производства, а сеансы должны храниться в базе данных (что может быть выполнено автоматически с использованием одного из многих модулей хранилища сеансов, которые ссылаются на выражения экспресс-сессии). –