电子 Node.js 节点本地存储 osx mkdir 权限被拒绝
Electron Node.js node localstorage osx mkdir permission denied
我正在使用 Electron 和 Node.js。我们开发了一个在 windows 上运行良好的应用程序,并且根据要求必须将其打包用于 mac os。我使用 electron-packager 打包应用程序,打包过程完成并生成包。双击它会引发 mkdir 权限被拒绝的错误,因为我正在使用节点本地存储来维护用户本地 machine 上的一些设置。不知何故 mac 没有本地存储在应用程序的根目录中创建文件夹。在这件事上的任何帮助都会很棒。谢谢
首先,有问题的代码是在主进程中还是在渲染器进程中?如果是后者,则不需要使用'node-localstorage',因为可以使用渲染器的原生LocalStorage。如果您在主进程中,那么您需要提供自己的存储策略,因此使用 'node-localstorage' 是一个可行的选择。
无论如何,您都需要仔细考虑将数据存储在何处;对于初学者,让我们看看 Electron 的渲染器进程将存储其 LocalStorage 数据的位置:这因 OS 而异,但您可以 get and set the paths using the app
module —— 有问题的路径是 userData
,在OS X 将默认为 ~/Library/Application Support/<App Name>
。 Electron 使用该文件夹来保存 cookie、缓存、LocalStorage 等,所以我建议也使用该文件夹。 (否则,请参阅 XDG 默认值以获得良好的默认值)
您上面的示例试图做的是将您的 'errorLogDb' 存储在当前工作目录中,这可能取决于您的 OS、应用程序的安装位置、执行方式等.
最后,在开发和测试期间区分您的 'production' 应用和您的应用是个好主意,因为您可能不想为每个环境使用相同的存储文件夹。无论如何,仅写入“./errorLogDb”可能会引起很多麻烦,因此我将感谢权限被拒绝的错误。
这个策略对我有用:
const { LocalStorage } = require('node-localstorage');
let ls;
mb.on('ready', () => {
let prefsPath = mb.app.getPath('userData') + '/prefs';
ls = new LocalStorage(prefsPath);
loadPrefs();
});
mb.on('after-create-window', () => { /* ls... */ }
exports.togglePref = () => { /* ls... */ }
我正在使用 Electron 和 Node.js。我们开发了一个在 windows 上运行良好的应用程序,并且根据要求必须将其打包用于 mac os。我使用 electron-packager 打包应用程序,打包过程完成并生成包。双击它会引发 mkdir 权限被拒绝的错误,因为我正在使用节点本地存储来维护用户本地 machine 上的一些设置。不知何故 mac 没有本地存储在应用程序的根目录中创建文件夹。在这件事上的任何帮助都会很棒。谢谢
首先,有问题的代码是在主进程中还是在渲染器进程中?如果是后者,则不需要使用'node-localstorage',因为可以使用渲染器的原生LocalStorage。如果您在主进程中,那么您需要提供自己的存储策略,因此使用 'node-localstorage' 是一个可行的选择。
无论如何,您都需要仔细考虑将数据存储在何处;对于初学者,让我们看看 Electron 的渲染器进程将存储其 LocalStorage 数据的位置:这因 OS 而异,但您可以 get and set the paths using the app
module —— 有问题的路径是 userData
,在OS X 将默认为 ~/Library/Application Support/<App Name>
。 Electron 使用该文件夹来保存 cookie、缓存、LocalStorage 等,所以我建议也使用该文件夹。 (否则,请参阅 XDG 默认值以获得良好的默认值)
您上面的示例试图做的是将您的 'errorLogDb' 存储在当前工作目录中,这可能取决于您的 OS、应用程序的安装位置、执行方式等.
最后,在开发和测试期间区分您的 'production' 应用和您的应用是个好主意,因为您可能不想为每个环境使用相同的存储文件夹。无论如何,仅写入“./errorLogDb”可能会引起很多麻烦,因此我将感谢权限被拒绝的错误。
这个策略对我有用:
const { LocalStorage } = require('node-localstorage');
let ls;
mb.on('ready', () => {
let prefsPath = mb.app.getPath('userData') + '/prefs';
ls = new LocalStorage(prefsPath);
loadPrefs();
});
mb.on('after-create-window', () => { /* ls... */ }
exports.togglePref = () => { /* ls... */ }