Как изменить местоположение / каталог для сохранения json в nw.js

Я хочу загрузить файл 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.

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

Готовы ли вы использовать модуль fs для решения этой проблемы? Причина, по которой я спрашиваю, заключается в том, что вы можете легко сделать это с помощью writeStream, если вам требуется ('fs), поскольку вы уже используете node, вам не нужно ничего устанавливать. Вот ссылка: nodejs.org/api/fs.html. Я могу сформулировать это в виде реального ответа, если хотите.

AlexanderGriffin 13.09.2018 21:20

Ответ был бы замечательным! Я не знаю, как использовать модуль fs или writeStream, поэтому, если бы вы могли это объяснить, я был бы признателен. @AlexanderGriffin

anyName 13.09.2018 21:24
0
2
923
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

const fs = require('fs');

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

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

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

const path = require('path');

console.log(path);

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

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

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

Обновлено:

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

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

Спасибо за ответ. Чтобы уточнить, будет ли по отношению к переменным, указанным мною в вопросе, outfileName быть эквивалентом testSave.json, outfilePath - эквивалентом папки saveFiles, а содержимое - эквивалентом mySettings? Я точно не знаю, как это реализовать. Создает ли это файл json и помещает его в папку outfilePath? И как указать путь назначения относительно файла nw.exe или файла манифеста package.json? Я признателен за любую дополнительную помощь, которую вы можете предоставить.

anyName 13.09.2018 21:42

OutfileName будет эквивалентно testSave.json yes; файл, в который вы пишете. Итак, чтобы использовать функцию, которую вы бы сделали writeFileNWJS ('testSave.json', fileContents) или writeFileNwJS ('./ testSave.json, fileContents) [это одно и то же, ./ относится к вашему текущему каталогу], вы можете просто добавить любой путь к названию. ПРИМЕР: если вы хотите сохранить в каталоге выше, где вы находитесь, используйте '../testSave.json'. Если это поможет, выбор моего сообщения в качестве ответа было бы фантастическим; P

AlexanderGriffin 13.09.2018 21:45

Без проблем! Рад помочь :)

AlexanderGriffin 13.09.2018 22:06

Другие вопросы по теме