我正在寻找一种简单的策略来存储用户数据和消息。我正在考虑使用不同的键值,例如用户的一些随机 token (Ynjk_nkjSNKJN) 和消息的一些真实 ID (1,2,3)。
有人遇到过这样的问题吗?
原因是我希望使 localStorage
始终与来自服务器的新消息保持同步,但在更新期间不应删除用户。
谢谢
最佳答案
您可以通过以下方式处理 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")) : {};
关于javascript - 用户和消息数据的本地存储策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34612162/