用于用户和消息数据的LocalStorage策略

时间:2016-01-05 12:51:09

标签: javascript angularjs local-storage

我正在寻找一种存储用户数据和消息的简单策略。我正在考虑为用户使用不同的键值,例如一些随机令牌( Ynjk_nkjSNKJN ),并为消息使用一些真实的ID(1,2,3)。

有没有人遇到过这个问题?

原因是我希望localStorage始终保持最新来自服务器的新消息,但不应在更新期间删除用户。

由于

2 个答案:

答案 0 :(得分: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")) : {};

答案 1 :(得分:0)

Localstorage是一个键值存储,它以{ "query": { "bool": { "must": [ { "nested": { "path": "address", "filter": { "geo_distance": { "distance": "address.radius", // How to set address.radius in kilometer "location": { "lat": 48.873452, "lon": 2.3522219 } } } } } ] } }} 格式存储所有内容。因此,消息将通过一个密钥(例如"消息")和用户另一个密钥(例如"用户")来识别。

然后,您需要为消息创建一个(角度)服务,为用户创建一个。两者都将与localstorage接口(使用相应的键)并将执行您想要的操作。

如果您向我们提供更多信息,那么我们可以为您提供更多帮助。