2016-07-08 2 views
1

В приложении 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); 
+0

вам нужно будет где-то хранить имена пользователей. обновляете ли вы модель на сервере авторизации OAuth2 для принудительного использования уникального ключа или сохранения имен пользователей с вашего сервера клиентских приложений. Если вы не можете получить доступ к серверу auth, то лучше всего сохранить каждое имя, используемое в базе данных, а затем запросить db перед аутентификацией, чтобы убедиться, что оно уникально. –

+0

@realseanp Проблема заключается в том, что пользователю Node.js необходимо временно хранить различную информацию, которая не должна сохраняться нигде, например, токены и т. Д. Поэтому я предполагаю, что ваш подход потребует не только класса «LocalUser» с одной единственной ' username', но также и некоторый другой класс для хранения данных «переходных» для пользователя, который не нуждается в сохранении. Это кажется запутанным исправлением. В Java существует возможность просто получить все экземпляры класса в памяти и получить доступ к ним по отдельности с помощью первичных ключей. Есть ли способ Node.js для повторения экземпляров класса? – FirstOfMany

+0

Вы можете временно хранить данные в сеансе, используя модуль экспресс-сессии https://github.com/expressjs/session. Я бы подумал, что имена пользователей должны будут постоянно сохраняться, и для вас потребуется модель «LocalUser», как вы сказали. express-session хранит сеансы в памяти по умолчанию, но они отмечают, что это не подходит для производства, а сеансы должны храниться в базе данных (что может быть выполнено автоматически с использованием одного из многих модулей хранилища сеансов, которые ссылаются на выражения экспресс-сессии). –

ответ

1

Я предлагаю выяснить проблему с ванили. Если вы просто хотите проверить, если имя является уникальным во время выполнения приложения, вы можете хранить имена, используемые для при создании экземпляра класса в массиве

'use strict'; 
var store = [] 
class AppUser { 
    constructor(name) { 
    if (store.indexOf(name) === -1) { 
     this.name = name; 
     store.push(name) 
    } 
    else { 
     console.log("warning " + name + " already exists"); 
     return; 
    } 
    } 
    getName() { 
    return this.name; 
    } 
} 

var user1 = new AppUser("marco"); 
var user2 = new AppUser("raphaello"); 
var user3 = new AppUser("marco"); 
console.log(user2.getName()); 

run : 
warning marco already exists 
raphaello 

Конечно, это только идея, и если эта идея будет заслуживает быть оставленным, бросая исключение, было бы лучше сделать прерывание инстикции, чем мое возвращение

+0

Как код вызова проверяет, существует ли 'marco', а затем измените его поведение на основе ответа? например 'Если существует marco', тогда user = marco. Else, user = new user (marco) '. У меня есть redis, сохраняющий объект пользователя, но у меня такая же проблема с сохранением ключа для объекта пользователя в памяти в Express/Node.Я изучаю, как JWT отправляется в приложение «Угловое приложение», а затем позволяет этому JWT помочь найти ключ Redis, когда запрос возвращается к серверу node.js/Express. – FirstOfMany

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