Как изменить расположение / каталог сохранения JSON в NW.js - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу загрузить файл JSON из папки с именем saveFiles (в том же каталоге, что и файл nw.exe и файл package.json (файл манифеста)).Проблема в том, что программа в настоящее время сохраняет файл JSON в C:\Users\userName\AppData\Local\appName\User Data\Default folder.Я не могу понять, как изменить папку назначения.Я прочитал, что могу изменить его, изменив значение "chromium-args": "--data-path='' в файле manifest package.json.Но я не знаю, какое значение мне нужно использовать, чтобы оно работало.В настоящее время package.json выглядит следующим образом:

{
"main": "index.html",
"name": "appName",
"chromium-args": "--data-path='./saveFiles/'",
"window":
  {
      "toolbar": true,
      "width": 1600,
      "height": 900,
      "min_width": 1000,
      "min_height": 500,
      "fullscreen": true,
      "title":"App Name"
  }
}

Я пробовал несколько вариантов, чтобы заставить его работать: --data-path='./saveFiles/', --data-path='/saveFiles/', --data-path='saveFiles/', но ничего не получилось.Мой формат неверный?Должен ли я использовать что-то отличное от "chromium-args": "--data-path=''"? Есть ли другой способ изменить папку / папку для сохранения?Я не знаю, как изменить его, чтобы он работал.

Дополнительная информация:

При сохранении файла JSON я использую следующий код:

var fs = require('fs');
var path = require('path');
function saveSettings (settings, callback) {
  var file = 'testSave.json';
  var filePath = path.join(nw.App.dataPath, file);
  fs.writeFile(filePath, settings, function (err) {
    if (err) {
      console.info("There was an error attempting to save your data.");
      console.warn(err.message);
      return;
    } else if (callback) {
      callback();
    }
  });
}
var mySettings = {
  color:'red',
  secondaryColor:'blue'
}
mySettings = JSON.stringify(mySettings);
saveSettings(mySettings, function () {
    console.log('Settings saved');
});

Это работает для сохранения файла в папке C: \ Users \ userName \ AppData \ Local \ appName \ User Data \ Default, но я хочу сохранить его в папке saveFiles (в том же месте, что и файл манифеста (package.JSON).) и файл nw.exe (который находится в той же папке, что и package.json)).

Функция загрузки для загрузки файла JSON выглядит следующим образом:

function testLoadFunc(){
  path = require('path');

  var xmlhttp = new XMLHttpRequest();
  var url = "saveFiles/testSave.json";

  xmlhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        var loadedSettings = JSON.parse(this.responseText);
        console.log('color: ' + loadedSettings.color);
      }
  };
  xmlhttp.open("GET", url, true);
  xmlhttp.send();
}
testLoadFunc(); //Loads json file

Это загружаетфайл правильно, но я должен вручную поместить файл testSave.json в папку saveFiles.Я хочу автоматически сохранить testSave.json в папке saveFiles.Таким образом, я пытаюсь выяснить, как изменить папку сохранения / каталог.

Альтернативным вариантом будет выяснить, как загрузить файл из текущего местоположения сохранения C:\Users\userName\AppData\Local\appName\User Data\Default, но я не знаю, каксделать это тоже.Предпочтительным вариантом будет просто изменить место сохранения в папку saveFiles.

Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

0 голосов
/ 13 сентября 2018

Одна вещь, которую вы можете сделать, это использовать модуль 'FS', который входит в состав узла. Я написал функцию, которая должна позволить вам передать имя файла (включая расширение) и fileContents:

const fs = require('fs');

function writeToFileNWJS(outfilePath, contents){
    let outfile = fs.createWriteStream(outfilePath);
    outfile.write(contents);
    outfile.end();
}

Если вы хотите сохранить файл в корневом каталоге вашего проекта, используйте «./filename» в качестве имени файла. Относительность пути в NW.js такая же, как и в любом другом месте узла. Если вы хотите сохранить в каталоге выше, где вы находитесь, используйте '../filename'.

Если вы хотите увидеть, каков ваш путь в любом месте вашего проекта, добавьте его в файл:

const path = require('path');

console.log(path);

Вы можете указать в начале пути «../» для каждого каталога, по которому вы хотите подняться; или добавьте дополнительные каталоги в конец вашего пути для детализации.

Оба модуля 'fs' и 'path' включены в node.js и не должны требовать каких-либо дополнительных команд установки npm.

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ:

Если вы хотите убедиться, что ваш файл полностью записан перед вызовом другой функции, вы можете вызвать другую функцию при возникновении события 'close':

outfile.on('close', function() {
  console.log('file done');
});
...