Я новичок в Electron, и я зациклился на том, как передать результат запроса для просмотра.
Вот js-файл:
const request = require('request');
let serverUrl = 'http://localhost:3000/api';
request.get({
url: serverUrl + '/properties'
}, handleResponse);
var properties = {};
function handleResponse(error, response, body) {
properties = JSON.parse(response.body);
console.info(properties);
}
А вот html-часть:
<div class = "block">
<div class = "title">General</div>
<script>
const { remote } = require('electron');
console.info(properties);
for (var i in remote.properties) {
document.write('<p>' + remote.properties[i] + '</p>');
}
</script>
Я знаю, что запрос асинхронный, поэтому console.info(properties)
из представления печатает {}
. Итак, есть ли способ отправить результат запроса в представление?
Наконец, я нашел решение, инкапсулировав запрос в функцию с обратным вызовом, как показано ниже:
function getProperties(callback) {
request.get({
url: serverUrl + '/properties'
}, function (error, response, body) {
callback(JSON.parse(response.body));
});
}
Теперь из представления мне просто нужно вызвать getProperties
:
<div class = "block">
<div class = "title">General</div>
<script>
getProperties((properties) => {
console.info(properties);
});
</script>
</div>
Вы можете либо отправить запрос из процесса средства визуализации и обработать ответ в обратном вызове, который выполняется после получения данных, либо сделать запрос в основном процессе, а затем отправить сообщение средству визуализации.
<!DOCTYPE html>
<html>
<body>
</body>
<script type = "text/javascript">
const request = require('request')
let serverUrl = 'http://localhost:3000/api'
request.get({
url: serverUrl + '/properties'
}, handleResponse)
function handleResponse(error, response, body) {
properties = JSON.parse(response.body)
for (var i in properties) {
document.write('<p>' + properties[i] + '</p>')
}
}
</script>
</html>
Основной:
const request = require('request')
let serverUrl = 'http://localhost:3000/api'
request.get({
url: serverUrl + '/properties'
}, handleResponse)
function handleResponse(error, response, body) {
properties = JSON.parse(response.body)
mainWindow.webContents.send('my_message', properties)
}
Рендерер:
<!DOCTYPE html>
<html>
<body>
</body>
<script type = "text/javascript">
require('electron').ipcRenderer.on('my_message', function(e, message) {
console.info(message)
for (var i in message) {
document.write('<p>' + message[i] + '</p>');
}
});
</script>
</html>
Спасибо ! Ваш ответ более полный