#javascript #electron #ipcrenderer #ipcmain
#javascript #электрон #ipcrenderer #ipcmain
Вопрос:
Я работаю над проектом с Electron и React. Я собираюсь выполнить несколько вызовов базы данных через ipcMain и ipcRenderer, поэтому я переместил вызовы для ipcMain в другой файл (ipcMainHandler.js ).
Проблема, с которой я сталкиваюсь сейчас, заключается в том, как отправлять ответы обратно в ipcRenderer. Я не могу получить доступ к MainWindow из этого файла.
Это код для моего основного файла.
const url = require('url');
const { app, BrowserWindow } = require('electron');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true,
enableRemoteModule: true,
preload: __dirname '/preload.js'
},
});
const startUrl =
process.env.ELECTRON_START_URL ||
url.format({
pathname: path.join(__dirname, './build/index.html'),
protocol: 'file:',
slashes: true,
});
mainWindow.loadURL(startUrl);
mainWindow.webContents.openDevTools();
mainWindow.on('closed', function () {
mainWindow = null;
});
}
app.on('ready', createWindow);
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', function () {
if (mainWindow === null) {
createWindow();
}
});
require('./src/server/helpers/ipcMainHandler.js');
В ipcMainHandler.js файл
const { SIGNIN_REQUEST, SIGNIN_RESPONSE } = require('../../common/events.js');
const { ipcMain } = require('electron');
ipcMain.on(SIGNIN_REQUEST, (event, data) => {
const user = AuthController.userSignin({ ...data });
});
Вещи, которые я пробовал
- Доступ к текущему окну с удаленного — выдает удаленную неопределенную ошибку
- Добавление MainWindow в глобальную переменную и попытка получить к ней доступ в ipcHander. — Это также возвращает неопределенное сообщение.
Ответ №1:
Проблема решена. Я использовал объект события для отправки ответа от ipcMain.
ipcMain.on(SIGNIN_REQUEST, async (event, data) => {
const user = await AuthController.userSignin({ ...data });
event.sender.send(SIGNIN_RESPONSE, user);
});