【问题标题】:How to change JSON save location/directory in NW.js如何在 NW.js 中更改 JSON 保存位置/目录
【发布时间】:2018-09-13 19:13:29
【问题描述】:

我想从名为 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=''"?以外的其他东西吗?是否有不同的方法来更改保存位置/目录?我不知道如何更改它以使其正常工作。

更多信息:

当我保存 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 模块来解决这个问题吗?我问的原因是因为如果你需要('fs),你可以很容易地用 writeStream 做到这一点,因为你已经在使用节点,你不应该安装任何东西。这是一个链接:nodejs.org/api/fs.html。如果您愿意,我可以将其表述为真正的答案。
  • 一个答案会很棒!我不知道如何使用 fs 模块或 writeStream,所以如果你能解释一下,我将不胜感激。 @亚历山大格里芬

标签: javascript json nw.js


【解决方案1】:

您可以做的一件事是使用 node.js 中包含的“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');
});

【讨论】:

  • 感谢您的回答。为了澄清,相对于我在问题中给出的变量,outfileName 是否等同于 testSave.json,outfilePath 是否等同于 saveFiles 文件夹,内容是否等同于 mySettings?我不确切知道如何实现这一点。这会创建一个 json 文件并将其放在 outfilePath 位置吗?以及如何指定相对于 nw.exe 文件或 package.json 清单文件的目标路径?感谢您提供的任何其他帮助。
  • outfileName 相当于 testSave.json 是的;您正在写入的文件。所以要使用你会做的函数 writeFileNWJS('testSave.json', fileContents) 或 writeFileNwJS('./testSave.json, fileContents) [它们是一样的,./ 指的是你的当前目录]你可以附加任何名称的路径。 EX:如果您想保存在上面的目录中,请使用'../testSave.json' 如果这有帮助,选择我的帖子作为答案会很棒;P
  • 没问题!很高兴帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2013-12-11
  • 2019-11-10
相关资源
最近更新 更多