簡體   English   中英

如何將 ipcMain.on 調用移到 main.js 文件之外

[英]How to move ipcMain.on calls outside the main.js file

我正在使用 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 });
});

我嘗試過的事情

  • 從遠程訪問 currentWindow - 引發遠程未定義錯誤
  • 將 mainWindow 添加到全局變量並嘗試在 ipcHander 中訪問它。 - 這也返回一個未定義的消息。

這已解決。 我使用事件 object 從 ipcMain 發送響應。

ipcMain.on(SIGNIN_REQUEST, async (event, data) => {
  const user = await AuthController.userSignin({ ...data });
  event.sender.send(SIGNIN_RESPONSE, user);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM