Чтение / запись и хранение данных внутри локального приложения (без сервера) с JavaScript - PullRequest
0 голосов
/ 26 марта 2019

Итак, я делаю локальное приложение, используя Javascript, React и Electron, и я хочу, чтобы оно могло нормально работать без интернета.

Я не могу использовать ' localStorage 'потому что данные могут быть удалены, если пользователь удаляет кеш.

Я пытался читать / писать с использованием разных модулей, ни один из них не работал в основном из-за CROS.Использование XMLHTTP-запросов и Ajax тоже не работает и у меня заканчивается время.

Когда я использую их на тестовом сервере, они возвращают index.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;
        });
      });

1 Ответ

0 голосов
/ 27 марта 2019

В этой статье рассматриваются 3 наиболее распространенных способа хранения пользовательских данных: Как хранить пользовательские данные в Electron

API Electron для appData делает то, чтоты хочешь.Он очень прост в использовании.

Из вышеприведенной статьи:

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

Возвращает 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.
...