我正在尝试在一个电子应用程序中打开一个切换开关,它启动一个快速服务器,并将一条消息发送回服务器正在运行的应用程序。
现在发生的事情是,开关被翻转,服务器被打开,但是事件并没有像它应该的那样回到渲染过程。
取而代之的是,我必须在浏览器中访问我的一个express服务器路由,然后它将发送之前应该发送的日志,以及路由请求附带的新日志。
索引.js
const {app, BrowserWindow, ipcMain} = require('electron');
ipcMain.on('log', (event, arg) => {
mainWindow.webContents.send('log', arg)
});
ipcMain.on('web-state', (event, current) => {
current ? Web.turnOff() : Web.turnOn()
event.sender.send('web-state', Web.isOn() ? true : false);
});
渲染.js
window.$ = window.jQuery = require('jquery');
const {ipcRenderer} = require('electron');
ipcRenderer.on('log', function(event , data) {
console.log(data);
});
$('#web-switch').on('click', function(e) {
var Server = !document.getElementById("web-switch").checked? Web.turnOff() : Web.turnOn();
});
服务器.js
const Express = require('express');
const Web = Express();
const Logger = require('./logger.js');
var Server;
let mainWindow;
function turnOn() {
return Server = Web.listen(Config.web.port || 4000, function() {
let str = 'App awakens on port ' + Config.web.port;
Logger.log(str, t);
});
}
module.exports = {
turnOn: function() {
return turnOn();
},
isOn: function() {
return Server? Server.address() : false;
}
}
logger.js日志
const {ipcRenderer} = require('electron');
function log(data, level) {
let str = 'something';
ipcRenderer.send('log', str);
}
module.exports = {
log: function(data, level) {
log(data,level)
}
}
index.html索引
require('../js/render.js');
<input type="checkbox" id="web-switch" name="web-switch">