使用 JavaScript 在本地应用程序(无服务器)中读取/写入和存储数据接口



所以我正在使用Javascript,React和Electron制作一个本地应用程序,我希望它能够在没有互联网的情况下正常工作。

我不能使用">localStorage",因为如果用户删除缓存,数据可能会被删除。

我尝试使用不同的模块进行阅读/写作,它们都没有工作,主要是因为 CROS。使用XMLHTTPrequests和Ajax也不起作用,而且时间不多了。

当我在测试服务器上使用它们时,它们返回主页的索引.html(他们至少可以访问...他们仍然无法读取数据),但是当我在构建中尝试它时,我收到CORS错误。

我现在的想法是在我的网页上启用 CORS,因为我不担心安全性:该应用程序将仅离线运行,因此没有危险。 但是几个小时后...我没有找到在客户端执行此操作的解决方案。

如果有人有想法或建议,我将不胜感激。

我试过: fs,FileReader,FileSaver, $.ajax,XMLHTTPrequests

//using $ajax
var test = $.ajax({
crossDomain:true,
type: 'GET',
url:'../data/DefaultCategorie.txt',
contentType: 'text/plain',
success: function(data){
console.log(data);
},
error: function(){
alert('failed');
},
})
//using fs
fs.readFile('../data/DefaultCategorie.txt', 'utf8', (err, data) => {
if (err) {
console.log("Failed");
throw err
}
console.log(data);
fs.close(data, (err) => {
if (err) throw err;
});
});

本文介绍了存储用户数据的 3 种最常见方法: 如何在Electron中存储用户数据

用于appData的Electron API可以满足您的需求。它非常易于使用。

从上面的文章中:

const userDataPath = (electron.app || electron.remote.app).getPath('userData');
this.path = path.join(userDataPath, opts.configName + '.json')
this.data = parseDataFile(this.path, opts.defaults);   

function parseDataFile(filePath, defaults) {
try {
return JSON.parse(fs.readFileSync(filePath));
} catch(error) {
// if there was some kind of error, return the passed in defaults instead.
return defaults;
}
}

文档

app.getPath(name)

name String

返回字符串 - 与 名字。失败时,将引发错误。

您可以按名称请求以下路径:

appData - Per-user application data directory, which by default points to:
%APPDATA% on Windows
$XDG_CONFIG_HOME or ~/.config on Linux
~/Library/Application Support on macOS
userData - The directory for storing your app's configuration files,
which by default it is the appData directory appended with your app's
name.

最新更新