Я пытаюсь написать электронное приложение, которое просто проверяет, может ли приложение подключиться к серверу через https/http.
Моя проблема заключается в том, что возвращаемая функция, которая тестирует два протокола, является "неопределенной" (console.log в index.html). Мне просто нужно нажать на файл (ping.php) через оба протокола, а затем оценить ответ (в renderer.js), чтобы я мог вывести его в окно приложения (через index.html).
Вот мои файлы:
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script
src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<div class="row mt-5">
<div class="col-6">
</div>
<button type="button" class="btn btn-success" id="buttonTestNetwork" onclick="getNetworkRequestTestResults()">Test Protocols</button>
</div>
</div>
<script src="./renderer.js"></script>
</body>
</html>
renderer.js
let list = []
getNetworkRequestTestResults = () => {
window.electron.getNetworkRequestTestResults().then(result => {
list = result
console.log(list)
})
}
main.js
const {app, BrowserWindow, net, ipcMain} = require('electron')
let win
function createWindow() {
win = new BrowserWindow({
width: 1200,
height: 800,
webPreferences: {
preload: `${__dirname}/preload.js`,
devTools: true
}
})
win.loadFile('index.html').then(() => {
})
win.webContents.openDevTools()
}
app.whenReady().then(() => {
createWindow()
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
ipcMain.handle('getNetworkRequestTestResults', (event) => {
let info = []
const list = ['server.com']
const protocols = [
{protocol: 'https:', port: 443},
{protocol: 'http:', port: 80}
]
for (let host of list) {
for (let protocol of protocols) {
const request = net.request({
method: 'POST',
protocol: protocol.protocol,
hostname: host,
port: protocol.port,
path: '/ping.php'
})
request.on('response', (response) => {
console.log(`STATUS: ${response.statusCode}`)
info.push(response.statusCode)
response.on('error', (error) => {
console.log(`ERROR: ${JSON.stringify(error)}`)
})
})
}
}
return info
})
preload.js
const {contextBridge, ipcRenderer} = require('electron')
contextBridge.exposeInMainWorld(
'electron',
{
getNetworkRequestTestResults: () => ipcRenderer.invoke('getNetworkRequestTestResults').then(result => {
return result
})
}
)