如何更改 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');
});
我想从名为 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');
});