Estoy tratando de separar la función IPC del archivo main.js en electron porque se vuelve demasiado largo
¿Cómo puedo usar este webContents.send en un archivo js diferente que no está en main.js?
mainWindow.webContents.send("search",recordset.recordset)muestra este error No se pueden leer las propiedades de undefined (leyendo 'webContents')
La separación de preocupaciones será su prioridad número uno aquí. Para lograr esto, puede usar setters y getters .
Recuerde, cuando Node
requirepor primera vez un módulo, también se almacena en caché. Usemos esta ventaja como una forma de gestión estatal.
Antes de separar/refactorizar su código, encontrará que su archivo main.js puede crecer hasta un tamaño enorme. El uso de técnicas como esta le permitirá dividir su código en segmentos de código de responsabilidad única fácilmente manejables y legibles.
Si aún no lo ha hecho, saquemos la construcción de su ventana principal del archivo mainWindow y la main.js en su propio archivo.
main.js (hilo principal)
// Import the necessary Electron modules. const electronApp = require('electron').app; const electronBrowserWindow = require('electron').BrowserWindow; // Import the necessary Node modules. const nodePath = require('path'); // Import the necessary Application modules. const appMainWindow = require(nodePath.join(__dirname, 'main-window')); // Prevent garbage collection. let mainWindow = null; // Application is now ready to start. electronApp.on('ready', () => { mainWindow = appMainWindow.create(); }); // Re-activate Application when in macOS dock. electronApp.on('activate', () => { if (electronBrowserWindow.getAllWindows().length === 0) { appMainWindow.create(mainWindow); } }); // Close Application completely if not on macOS. electronApp.on('window-all-closed', () => { if (process.platform !== 'darwin') { electronApp.quit(); } }); Tener la administración del objeto mainWindow en su propio archivo separa nuestro código en fragmentos más legibles y manejables.
main-window.js (hilo principal)
// Import the necessary Electron modules. const electronBrowserWindow = require('electron').BrowserWindow; // Define the main window. let mainWindow; // Create the main window. function create() { mainWindow = new electronBrowserWindow({ x: 0, y: 0, width: 800, height: 600, show: false, webPreferences: { nodeIntegration: false, contextIsolation: true, preload: nodePath.join(__dirname, 'preload.js') } }); // Load the main window. mainWindow.loadFile(nodePath.join(__dirname, 'main-window.html')) .then(() => { mainWindow.show(); }) return mainWindow; } // Get the main window object. function get() { return mainWindow; } // Export the publicly available functions. module.exports = {create, get}; Finalmente, en su archivo (o cualquier otro archivo) que requiera una referencia a su objeto mainWindow , solo require su archivo main-window.js y llame a la función get() .
any-file (hilo principal)
// Import the necessary Node modules. const nodePath = require('path'); // Import the necessary Application modules. const appMainWindow = require(nodePath.join(__dirname, 'main-window')); // Lets use it. appMainWindow.get().webContents.send("search", recordset.recordset);