Electron Node.js节点localstorage osx mkdir权限被拒绝

时间:2016-02-05 19:41:56

标签: node.js macos electron

我正在使用Electron和Node.js.我们开发了一个在windows上运行良好的应用程序,并且必须将其打包为mac os。我使用electronic-packager打包应用程序,打包完成包并生成包。双击它会抛出mkdir权限被拒绝的错误,因为我使用node localstorage来维护用户本地计算机上的某些设置。不知何故,mac没有本地存储来在应用程序的根目录中创建文件夹。在这件事上的任何帮助都会很棒。感谢

2 个答案:

答案 0 :(得分:2)

首先,主进程或渲染器进程中的代码是否有问题?如果是后者,则不需要使用“node-localstorage”,因为您可以使用渲染器的本机LocalStorage。如果您处于主要流程中,那么您需要提供自己的存储策略,因此使用“node-localstorage”是一个可行的选择。

无论如何,您需要仔细考虑存储数据的位置;对于初学者,让我们看一下Electron的渲染器进程将存储其LocalStorage数据的位置:这根据操作系统的不同而不同,但您可以get and set the paths using the app module - 有问题的路径是userData,在OS X上会默认到~/Library/Application Support/<App Name>。 Electron使用该文件夹来保存cookie,缓存,LocalStorage等。所以我建议也使用该文件夹。 (否则,请参阅XDG默认值以获得良好的默认值)

您上面的示例是将“errorLogDb”存储在当前工作目录中,这可能取决于您的操作系统,安装App的位置,执行方式等等。

最后,在开发和测试期间区分“生产”应用和应用是个不错的主意,因为您可能不希望为每个环境使用相同的存储文件夹。在任何情况下,只要写入'./errorLogDb'可能会引起很多麻烦,所以我要感谢许可被拒绝的错误。

答案 1 :(得分:0)

这个策略对我有用:

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... */ }