如何更改 JSON 在 NW.js 中保存 location/directory

How to change JSON save location/directory in NW.js

我想从名为 saveFiles 的文件夹(与 nw.exe 文件和 package.json 文件(清单文件)位于同一目录中)加载一个 JSON 文件。问题是程序当前将 JSON 文件保存到 C:\Users\userName\AppData\Local\appName\User Data\Default folder。我不知道如何更改目标文件夹。我读到我可以通过调整清单 package.json 文件中的 "chromium-args": "--data-path='' 值来更改它。但我不知道我需要使用什么价值才能让它发挥作用。当前 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=''"? 以外的东西吗?有不同的方法来更改保存 location/directory 吗?我不知道如何更改它以使其工作。

更多信息:

当我保存 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 文件夹中。因此,我试图找出如何更改保存 location/directory.

另一种选择是找出如何从当前保存位置加载文件 C:\Users\userName\AppData\Local\appName\User Data\Default,但我也不知道该怎么做。更好的选择是将保存位置更改为 saveFiles 文件夹。

感谢您提供的任何帮助。

你可以做的一件事是使用节点中包含的 'FS' 模块。我写了一个函数,应该允许你传入文件名(包括扩展名)和文件内容:

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 install 命令。

希望对您有所帮助!

编辑:

如果你想确保你的文件在调用另一个函数之前被完全写入,你可以在 'close' 事件被触发时调用另一个函数:

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