Чтобы получить путь к приложению в вашем основном процессе . Затем используйте этот код у себя на главной. js
switch(process.platform) {
case 'darwin': {
return path.join(process.env.HOME, 'Library', 'Application Support', ...);
}
case 'win32': {
return path.join(process.env.APPDATA, ...);
}
case 'linux': {
return path.join(process.env.HOME, ...);
}
}
И вы получите путь от рендерера , затем используйте этот код у своего рендерера
const remote = require('electron').remote;
const app = remote.app;
console.log(app.getPath('userData'));
Но для использования require у вашего рендерера, пожалуйста, убедитесь, что nodeintegration имеет значение true.
На вашем месте я собирался получить путь к приложению на основной процесс и сохраните файл в основной процесс . Следовательно, импорт многих зависимостей при процессе визуализации не является хорошим выбором. Процесс визуализации в основном заботится о том, чтобы ваше приложение отображалось в браузере Chromium.
Итак, чтобы выполнить эту операцию в основной процесс . Используйте это
у себя на главном. js
const { ipcMain } = require('electron')
const appPath = () => {
switch(process.platform) {
case 'darwin': {
return path.join(process.env.HOME, 'Library', 'Application Support');
}
case 'win32': {
return process.env.APPDATA;
}
case 'linux': {
return process.env.HOME;
}
}
}
const writeToFile = (fileName, inData) => {
const fullPath = path.join(appPath(), "\\", fileName);
fs.writeFile(fullPath, inData, (err) => {
// throws an error, you could also catch it here
if (err) throw err;
// success case, the file was saved
console.log('Lyric saved!');
});
} // write_to_file
ipcMain.on('WRITE_TEXT', async (event, arg) => {
writeToFile(arg.fileName, arg.inData)
});
В процессе рендеринга добавьте этот код.
const {ipcRenderer} = require('electron')
ipcRenderer.sendSync('WRITE_TEXT',{fileName, inData})
Как видите, на процесс рендеринга , это отправка inp_data
на ваш основной процесс через 'WRITE_TEXT' IP C канал .
Еще одна вещь здесь, на ваш код. Вы подключаете свою БД у своего рендерера, и это возможно, но это неправильный выбор. Пожалуйста, подумайте, пока у вас есть несколько рендереров. Вы также должны перенести это в основной процесс.