如何在NW.js中更改JSON保存位置/目录

问题描述 投票:0回答:1

我想从名为saveFiles的文件夹中加载一个JSON文件(与nw.exe文件和package.json文件(清单文件)在同一目录中)。问题是程序当前将JSON文件保存到C:\Users\userName\AppData\Local\appName\User Data\Default folder。我无法弄清楚如何更改目标文件夹。我读到我可以通过调整manifest 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=''"?之外的其他东西有不同的方法来更改保存位置/目录吗?我不知道如何更改它以使其工作。

更多信息:

当我保存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文件夹。

感谢您提供任何帮助。

javascript json nw.js
1个回答
1
投票

您可以做的一件事是使用节点附带的“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 install命令。

希望这可以帮助!

编辑:

如果要在调用另一个函数之前确保完全写入文件,则可以在触发“close”事件时调用另一个函数:

outfile.on('close', function() {
  console.log('file done');
});
© www.soinside.com 2019 - 2024. All rights reserved.