2016-01-05 5 views
1

Я ищу простую стратегию хранения пользовательских данных, а также сообщений. Я думал использовать разные ключевые значения, например, случайный токен (Ynjk_nkjSNKJN) для пользователей и некоторые реальные идентификаторы (1,2,3) для сообщений.Стратегия LocalStorage для данных пользователя и сообщений

У кого-нибудь была эта проблема?

Причина в том, что я хотел бы поддерживать localStorage всегда в курсе новых сообщений с сервера, но пользователи не должны удаляться во время обновления.

Благодаря

+1

пользователя ID, ID сообщения (и содержание, если вы хотите, чтобы быть читаемыми в автономном режиме), и сервер-сформированное сообщение Отметка времени даст вам достаточно информации, чтобы иметь дело с отсоединится , повторно подключается, сообщения отправляются из строя и т. д. Еще одно соображение заключается в том, чтобы иметь «беседы», а не сообщения от пользователей. Затем вам понадобится идентификатор беседы, идентификатор сообщения (& content), идентификатор пользователя и временная метка, но вы можете избежать неприятностей позже по строке (например, групповые разговоры). –

+0

Спасибо Адаму, я думаю, я сделаю это. Я думаю, localStorage - это именно то, что есть :), а не localDB. – MichelH

+1

Да, любая реализация потребует сначала линейного считывания любого значения (обычно JSON), которое хранится в каждом ключе. Вы могли бы использовать идентификаторы 'user' /' conversation' как ключи localStorage, но, в конечном счете, вы имеете дело с хранилищем значений ключей, а не с полным движком БД, хотя я уверен, что есть базы данных javascript, которые вы можете запускайте в клиенте, который использует localStorage для хранения своей структуры, если вы * отчаянно нуждаетесь в этом. –

ответ

1

Вы можете обрабатывать «столы» в localStorage так:

//columns should be an array of column literals 
function createTable(tableName, columns) { 
    db[tableName] = {rows: {}, columns: columns}; 
} 

function insertInto(tableName, row, id) { 
    var newRow = {}; 
    for (var columnName in row) { 
     if (db[tableName].columns.indexOf(columnName) === -1) { 
      //invalid column 
      return false; 
     } 
     newRow[columnName] = row[columnName]; 
    } 
    db[tableName].rows[id] = newRow; 
    return true; 
} 

function getIDs(tableName, where) { 
    var IDs = []; 
    for (var id in db[tableName].rows) { 
     if (where(db[tableName].rows[id])) { 
      IDs[IDs.length]=id; 
     } 
    } 
    return IDs; 
} 

function update(tableName, where, what) { 
    what(tableName, getIDs(tableName, where)); 
} 

function deleteRecord(tableName, where) { 
    var removeIDs = getIDs(tableName, where); 
    for (var id in removeIDs) { 
     //Could be done by regexes, but I am not fluent with them and I am lazy to check them out 
     delete db[tableName].rows[removeIDs[id]]; 
    } 
} 

function select(tableName, where) { 
    var IDs = getIDs(tableName, where); 
    var result = {}; 
    for (var id in db[tableName].rows) { 
     result[id] = db[tableName].rows[id]; 
    } 
    return result; 
} 

function dropTable(tableName) { 
    delete db[tableName]; 
} 

Вы, наверное, видите, что это только минималистичные реализации, но с таким же подходом можно реализовать изменять, объединение, группировка и так далее. Мое внимание здесь было просто для иллюстрации того, как вы можете создать базу данных. Давайте вернемся к следующему шагу, хранение базы данных в localStorage:

localStorage.setItem("db", JSON.stringify(db)); 

Вы должны быть в состоянии преобразовать обратно в локальный элемент хранения на объект, особенно потому, что вы хотите использовать вашу базу данных даже после перезагрузки. Давайте посмотрим, как вы должны инициализировать db:

var db = !!localStorage.getItem("db") ? angular.fromJson(localStorage.getItem("db")) : {}; 
+0

О, хорошо. Я посмотрю на это! Большое спасибо! – MichelH

+0

@MichelH, добро пожаловать. Если это ответит на ваш вопрос, вы можете подумать о принятии ответа. –

0

LocalStorage является магазин ключ-значение, которое хранит все в формате string. Таким образом, сообщения будут идентифицироваться одним ключом (например, «сообщениями») и пользователями другого ключа (например, «пользователи»).

Затем вам нужно создать 2 (угловые) службы для сообщений и одну для пользователей. Оба интерфейса будут взаимодействовать с localstorage (используя соответствующие ключи) и будут выполнять операции, которые вы хотите.

Если вы предоставите нам дополнительную информацию, мы можем помочь вам немного больше.

+0

Спасибо, ipinak, я реализовал все это. Наверное, я надеялся на ответ, который превращает localStorage в полезный DB, но я думаю, что это не то, что должно было быть localStorage. – MichelH