Javascript 如何跨设备扩展本地存储(无数据库)
目标:在我的应用程序中扩展我已经实现的Javascript 如何跨设备扩展本地存储(无数据库),javascript,node.js,json,cookies,local-storage,Javascript,Node.js,Json,Cookies,Local Storage,目标:在我的应用程序中扩展我已经实现的localStorage,好吧,我想是非本地的 我喜欢使用本地存储API保存简单用户设置的实现。我在一个web应用程序中使用它来满足我的需要,但唯一的问题是它对于正在使用/保存的机器/浏览器来说是本地的。对此,我没有访问经典MySQL样式表的权限。我想扩展或调整我的本地存储,以便将其应用于其他浏览器;或者将我的用户设置存储在用户JS对象和JS对象属性中 我喜欢为每个用户创建JSON或JavaScript对象的想法,每当有新用户时,使用名称创建一个对象或带
localStorage
,好吧,我想是非本地的
我喜欢使用本地存储API保存简单用户设置的实现。我在一个web应用程序中使用它来满足我的需要,但唯一的问题是它对于正在使用/保存的机器/浏览器来说是本地的。对此,我没有访问经典MySQL样式表的权限。我想扩展或调整我的本地存储,以便将其应用于其他浏览器;或者将我的用户设置存储在用户JS对象和JS对象属性中
- 我喜欢为每个用户创建JSON或JavaScript对象的想法,每当有新用户时,使用名称创建一个对象或带有名称的
,并首先使用字段属性默认变量,并且在用户保存变量时填充或覆盖变量object[key]
- 或者,如果上述情况不受欢迎;希望保留我的localstorage实现,因为它工作得很好,并且 某种类型的插件/库/扩展,允许我保存 这将在不同的位置重新渲染;这应该是 想起以前。虽然我很愿意把它保留在客户端;我是 打开node.js解决方案以及python解决方案,一个简单的 各种类型的数据框架应该足够工作了
- 用我的
数据生成一个文件怎么样?可能是一个.csv文件(这是非敏感数据),并让它像mylocalStorage
那样更新localStorage
至少我认为它比cvs好,因为您可以定义几个表,这是一个更具可伸缩性、更高效的数据库。您可以使用一个名为
localfour
的库,它基本上与localStorage
具有相同的API,只是允许您存储更复杂的数据结构(数组、对象),还支持nodejs
风格的回调、承诺和async
wait
这里有一个链接到
在这里,您可以找到示例用法以及如何以您喜欢的方式在项目中实现它。我在这里添加了我的两分钱
导出/导入文件(JSON、XML、CSV、TSV等) 导出:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Settings Export/Import Demo</title>
</head>
<body>
<div id="display"></div> <br>
<button onclick="exportSettings();">Export</button>
<button onclick="resetSettings();">Reset</button> <br><br>
File to import: <input id="file-input" type="file" accept="application/json"> <br>
<button onclick="importSettings();">Import</button>
<script>
function exportSettings() {
var json = getSettingsAsJSON();
var blob = new Blob([json], { type: "application/json" });
var linkElement = document.createElement("a");
linkElement.href = URL.createObjectURL(blob);
linkElement.download = "ThisIsMySettings";
document.body.appendChild(linkElement);
linkElement.click();
document.body.removeChild(linkElement);
}
function importSettings() {
var fileInput = document.getElementById("file-input");
if (fileInput.files.length > 0) {
var jsonFile = fileInput.files[0];
var fileReader = new FileReader();
fileReader.onload = function (e) {
var json = e.target.result;
try {
var settings = JSON.parse(json);
if (settings.hasOwnProperty("userId")) {
localStorage["myapp_user_id"] = settings.userId;
}
if (settings.hasOwnProperty("hello")) {
localStorage["myapp_hello"] = settings.hello;
}
if (settings.hasOwnProperty("data")) {
localStorage["myapp_data"] = settings.data;
}
displaySettings();
} catch (ex) {
console.error(ex);
alert("Error occured while importing settings!");
}
};
fileReader.readAsText(jsonFile);
}
}
function resetSettings() {
localStorage["myapp_user_id"] = Math.floor(Math.random() * 100000) + 1;
localStorage["myapp_hello"] = "Hello World!";
localStorage["myapp_data"] = JSON.stringify([1, 3, 3, 7]);
displaySettings();
}
function displaySettings() {
var json = getSettingsAsJSON();
document.getElementById("display").innerText = json;
}
function getSettingsAsJSON() {
return JSON.stringify({
userId: localStorage["myapp_user_id"],
hello: localStorage["myapp_hello"],
data: localStorage["myapp_data"]
});
}
resetSettings();
</script>
</body>
</html>
序列化设置并将其作为文件下载
导入:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Settings Export/Import Demo</title>
</head>
<body>
<div id="display"></div> <br>
<button onclick="exportSettings();">Export</button>
<button onclick="resetSettings();">Reset</button> <br><br>
File to import: <input id="file-input" type="file" accept="application/json"> <br>
<button onclick="importSettings();">Import</button>
<script>
function exportSettings() {
var json = getSettingsAsJSON();
var blob = new Blob([json], { type: "application/json" });
var linkElement = document.createElement("a");
linkElement.href = URL.createObjectURL(blob);
linkElement.download = "ThisIsMySettings";
document.body.appendChild(linkElement);
linkElement.click();
document.body.removeChild(linkElement);
}
function importSettings() {
var fileInput = document.getElementById("file-input");
if (fileInput.files.length > 0) {
var jsonFile = fileInput.files[0];
var fileReader = new FileReader();
fileReader.onload = function (e) {
var json = e.target.result;
try {
var settings = JSON.parse(json);
if (settings.hasOwnProperty("userId")) {
localStorage["myapp_user_id"] = settings.userId;
}
if (settings.hasOwnProperty("hello")) {
localStorage["myapp_hello"] = settings.hello;
}
if (settings.hasOwnProperty("data")) {
localStorage["myapp_data"] = settings.data;
}
displaySettings();
} catch (ex) {
console.error(ex);
alert("Error occured while importing settings!");
}
};
fileReader.readAsText(jsonFile);
}
}
function resetSettings() {
localStorage["myapp_user_id"] = Math.floor(Math.random() * 100000) + 1;
localStorage["myapp_hello"] = "Hello World!";
localStorage["myapp_data"] = JSON.stringify([1, 3, 3, 7]);
displaySettings();
}
function displaySettings() {
var json = getSettingsAsJSON();
document.getElementById("display").innerText = json;
}
function getSettingsAsJSON() {
return JSON.stringify({
userId: localStorage["myapp_user_id"],
hello: localStorage["myapp_hello"],
data: localStorage["myapp_data"]
});
}
resetSettings();
</script>
</body>
</html>
打开导出/下载的序列化设置文件
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Settings Export/Import Demo</title>
</head>
<body>
<div id="display"></div> <br>
<button onclick="exportSettings();">Export</button>
<button onclick="resetSettings();">Reset</button> <br><br>
File to import: <input id="file-input" type="file" accept="application/json"> <br>
<button onclick="importSettings();">Import</button>
<script>
function exportSettings() {
var json = getSettingsAsJSON();
var blob = new Blob([json], { type: "application/json" });
var linkElement = document.createElement("a");
linkElement.href = URL.createObjectURL(blob);
linkElement.download = "ThisIsMySettings";
document.body.appendChild(linkElement);
linkElement.click();
document.body.removeChild(linkElement);
}
function importSettings() {
var fileInput = document.getElementById("file-input");
if (fileInput.files.length > 0) {
var jsonFile = fileInput.files[0];
var fileReader = new FileReader();
fileReader.onload = function (e) {
var json = e.target.result;
try {
var settings = JSON.parse(json);
if (settings.hasOwnProperty("userId")) {
localStorage["myapp_user_id"] = settings.userId;
}
if (settings.hasOwnProperty("hello")) {
localStorage["myapp_hello"] = settings.hello;
}
if (settings.hasOwnProperty("data")) {
localStorage["myapp_data"] = settings.data;
}
displaySettings();
} catch (ex) {
console.error(ex);
alert("Error occured while importing settings!");
}
};
fileReader.readAsText(jsonFile);
}
}
function resetSettings() {
localStorage["myapp_user_id"] = Math.floor(Math.random() * 100000) + 1;
localStorage["myapp_hello"] = "Hello World!";
localStorage["myapp_data"] = JSON.stringify([1, 3, 3, 7]);
displaySettings();
}
function displaySettings() {
var json = getSettingsAsJSON();
document.getElementById("display").innerText = json;
}
function getSettingsAsJSON() {
return JSON.stringify({
userId: localStorage["myapp_user_id"],
hello: localStorage["myapp_hello"],
data: localStorage["myapp_data"]
});
}
resetSettings();
</script>
</body>
</html>
设置导出/导入演示
出口
重置
要导入的文件:
进口
函数exportSettings(){
var json=getSettingsAsJSON();
var blob=new blob([json],{type:“application/json”});
var linkElement=document.createElement(“a”);
linkElement.href=URL.createObjectURL(blob);
linkElement.download=“ThisIsMySettings”;
document.body.appendChild(linkElement);
linkElement.click();
document.body.removeChild(linkElement);
}
函数导入设置(){
var fileInput=document.getElementById(“文件输入”);
如果(fileInput.files.length>0){
var jsonFile=fileInput.files[0];
var fileReader=newfilereader();
fileReader.onload=函数(e){
var json=e.target.result;
试一试{
var settings=JSON.parse(JSON);
if(settings.hasOwnProperty(“userId”)){
localStorage[“myapp\u user\u id”]=settings.userId;
}
if(settings.hasOwnProperty(“hello”)){
localStorage[“myapp_hello”]=settings.hello;
}
if(settings.hasOwnProperty(“数据”)){
localStorage[“myapp_数据”]=settings.data;
}
显示设置();
}捕获(ex){
控制台错误(ex);
警报(“导入设置时出错!”);
}
};
readAsText(jsonFile);
}
}
函数重置设置(){
localStorage[“myapp\u user\u id”]=Math.floor(Math.random()*100000)+1;
本地存储[“myapp_hello”]=“hello World!”;
localStorage[“myapp_data”]=JSON.stringify([1,3,3,7]);
显示设置();
}
函数displaySettings(){
var json=getSettingsAsJSON();
document.getElementById(“display”).innerText=json;
}
函数getSettingsAsJSON(){
返回JSON.stringify({
userId:localStorage[“myapp\u user\u id”],
你好:localStorage[“myapp_你好”],
数据:本地存储[“myapp_数据”]
});
}
重置设置();
URL(查询字符串) 导出:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Settings Export/Import Demo</title>
</head>
<body>
<div id="display"></div> <br>
<button onclick="exportSettings();">Export</button>
<button onclick="resetSettings();">Reset</button> <br><br>
File to import: <input id="file-input" type="file" accept="application/json"> <br>
<button onclick="importSettings();">Import</button>
<script>
function exportSettings() {
var json = getSettingsAsJSON();
var blob = new Blob([json], { type: "application/json" });
var linkElement = document.createElement("a");
linkElement.href = URL.createObjectURL(blob);
linkElement.download = "ThisIsMySettings";
document.body.appendChild(linkElement);
linkElement.click();
document.body.removeChild(linkElement);
}
function importSettings() {
var fileInput = document.getElementById("file-input");
if (fileInput.files.length > 0) {
var jsonFile = fileInput.files[0];
var fileReader = new FileReader();
fileReader.onload = function (e) {
var json = e.target.result;
try {
var settings = JSON.parse(json);
if (settings.hasOwnProperty("userId")) {
localStorage["myapp_user_id"] = settings.userId;
}
if (settings.hasOwnProperty("hello")) {
localStorage["myapp_hello"] = settings.hello;
}
if (settings.hasOwnProperty("data")) {
localStorage["myapp_data"] = settings.data;
}
displaySettings();
} catch (ex) {
console.error(ex);
alert("Error occured while importing settings!");
}
};
fileReader.readAsText(jsonFile);
}
}
function resetSettings() {
localStorage["myapp_user_id"] = Math.floor(Math.random() * 100000) + 1;
localStorage["myapp_hello"] = "Hello World!";
localStorage["myapp_data"] = JSON.stringify([1, 3, 3, 7]);
displaySettings();
}
function displaySettings() {
var json = getSettingsAsJSON();
document.getElementById("display").innerText = json;
}
function getSettingsAsJSON() {
return JSON.stringify({
userId: localStorage["myapp_user_id"],
hello: localStorage["myapp_hello"],
data: localStorage["myapp_data"]
});
}
resetSettings();
</script>
</body>
</html>
将设置编码为查询字符串,并与当前URL合并为超链接
导入:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Settings Export/Import Demo</title>
</head>
<body>
<div id="display"></div> <br>
<button onclick="exportSettings();">Export</button>
<button onclick="resetSettings();">Reset</button> <br><br>
File to import: <input id="file-input" type="file" accept="application/json"> <br>
<button onclick="importSettings();">Import</button>
<script>
function exportSettings() {
var json = getSettingsAsJSON();
var blob = new Blob([json], { type: "application/json" });
var linkElement = document.createElement("a");
linkElement.href = URL.createObjectURL(blob);
linkElement.download = "ThisIsMySettings";
document.body.appendChild(linkElement);
linkElement.click();
document.body.removeChild(linkElement);
}
function importSettings() {
var fileInput = document.getElementById("file-input");
if (fileInput.files.length > 0) {
var jsonFile = fileInput.files[0];
var fileReader = new FileReader();
fileReader.onload = function (e) {
var json = e.target.result;
try {
var settings = JSON.parse(json);
if (settings.hasOwnProperty("userId")) {
localStorage["myapp_user_id"] = settings.userId;
}
if (settings.hasOwnProperty("hello")) {
localStorage["myapp_hello"] = settings.hello;
}
if (settings.hasOwnProperty("data")) {
localStorage["myapp_data"] = settings.data;
}
displaySettings();
} catch (ex) {
console.error(ex);
alert("Error occured while importing settings!");
}
};
fileReader.readAsText(jsonFile);
}
}
function resetSettings() {
localStorage["myapp_user_id"] = Math.floor(Math.random() * 100000) + 1;
localStorage["myapp_hello"] = "Hello World!";
localStorage["myapp_data"] = JSON.stringify([1, 3, 3, 7]);
displaySettings();
}
function displaySettings() {
var json = getSettingsAsJSON();
document.getElementById("display").innerText = json;
}
function getSettingsAsJSON() {
return JSON.stringify({
userId: localStorage["myapp_user_id"],
hello: localStorage["myapp_hello"],
data: localStorage["myapp_data"]
});
}
resetSettings();
</script>
</body>
</html>
访问包含带有编码设置的查询字符串的超链接,然后使用JavaScript检测并从查询字符串加载设置
Base64编码数据 导出:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Settings Export/Import Demo</title>
</head>
<body>
<div id="display"></div> <br>
<button onclick="exportSettings();">Export</button>
<button onclick="resetSettings();">Reset</button> <br><br>
File to import: <input id="file-input" type="file" accept="application/json"> <br>
<button onclick="importSettings();">Import</button>
<script>
function exportSettings() {
var json = getSettingsAsJSON();
var blob = new Blob([json], { type: "application/json" });
var linkElement = document.createElement("a");
linkElement.href = URL.createObjectURL(blob);
linkElement.download = "ThisIsMySettings";
document.body.appendChild(linkElement);
linkElement.click();
document.body.removeChild(linkElement);
}
function importSettings() {
var fileInput = document.getElementById("file-input");
if (fileInput.files.length > 0) {
var jsonFile = fileInput.files[0];
var fileReader = new FileReader();
fileReader.onload = function (e) {
var json = e.target.result;
try {
var settings = JSON.parse(json);
if (settings.hasOwnProperty("userId")) {
localStorage["myapp_user_id"] = settings.userId;
}
if (settings.hasOwnProperty("hello")) {
localStorage["myapp_hello"] = settings.hello;
}
if (settings.hasOwnProperty("data")) {
localStorage["myapp_data"] = settings.data;
}
displaySettings();
} catch (ex) {
console.error(ex);
alert("Error occured while importing settings!");
}
};
fileReader.readAsText(jsonFile);
}
}
function resetSettings() {
localStorage["myapp_user_id"] = Math.floor(Math.random() * 100000) + 1;
localStorage["myapp_hello"] = "Hello World!";
localStorage["myapp_data"] = JSON.stringify([1, 3, 3, 7]);
displaySettings();
}
function displaySettings() {
var json = getSettingsAsJSON();
document.getElementById("display").innerText = json;
}
function getSettingsAsJSON() {
return JSON.stringify({
userId: localStorage["myapp_user_id"],
hello: localStorage["myapp_hello"],
data: localStorage["myapp_data"]
});
}
resetSettings();
</script>
</body>
</html>
序列化设置,然后将其编码为Base64字符串,然后复制到剪贴板
导入:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Settings Export/Import Demo</title>
</head>
<body>
<div id="display"></div> <br>
<button onclick="exportSettings();">Export</button>
<button onclick="resetSettings();">Reset</button> <br><br>
File to import: <input id="file-input" type="file" accept="application/json"> <br>
<button onclick="importSettings();">Import</button>
<script>
function exportSettings() {
var json = getSettingsAsJSON();
var blob = new Blob([json], { type: "application/json" });
var linkElement = document.createElement("a");
linkElement.href = URL.createObjectURL(blob);
linkElement.download = "ThisIsMySettings";
document.body.appendChild(linkElement);
linkElement.click();
document.body.removeChild(linkElement);
}
function importSettings() {
var fileInput = document.getElementById("file-input");
if (fileInput.files.length > 0) {
var jsonFile = fileInput.files[0];
var fileReader = new FileReader();
fileReader.onload = function (e) {
var json = e.target.result;
try {
var settings = JSON.parse(json);
if (settings.hasOwnProperty("userId")) {
localStorage["myapp_user_id"] = settings.userId;
}
if (settings.hasOwnProperty("hello")) {
localStorage["myapp_hello"] = settings.hello;
}
if (settings.hasOwnProperty("data")) {
localStorage["myapp_data"] = settings.data;
}
displaySettings();
} catch (ex) {
console.error(ex);
alert("Error occured while importing settings!");
}
};
fileReader.readAsText(jsonFile);
}
}
function resetSettings() {
localStorage["myapp_user_id"] = Math.floor(Math.random() * 100000) + 1;
localStorage["myapp_hello"] = "Hello World!";
localStorage["myapp_data"] = JSON.stringify([1, 3, 3, 7]);
displaySettings();
}
function displaySettings() {
var json = getSettingsAsJSON();
document.getElementById("display").innerText = json;
}
function getSettingsAsJSON() {
return JSON.stringify({
userId: localStorage["myapp_user_id"],
hello: localStorage["myapp_hello"],
data: localStorage["myapp_data"]
});
}
resetSettings();
</script>
</body>
</html>
将剪贴板中的Base64字符串粘贴到文本框中