从主Electron进程发送的JSON在渲染器中未定义

jgovgodb  于 2023-06-27  发布在  Electron
关注(0)|答案(1)|浏览(151)

我目前正在做一个电子项目,让我的脚湿与技术。到目前为止,我发现它非常有趣和有趣,我正在为我的物联网设备构建一个小型家庭控制器,虽然它是初级的,但我现在遇到了一个小问题。我在main.js中有一个函数,它向我的Philips Hue Bridge设备发出请求,以获取它连接到它的所有灯的列表。我正在使用以下函数:

function refreshLight() {
  console.log('Searching for lights');
  const HEADER = {
    'hue-application-key': `${HUE_KEY}`,
    'Content-type': 'text/plain'
  };

  const URL = `https://${HUE_IP}/clip/v2/resource/device`;

  axios.get(URL, {
    headers: HEADER,
    httpsAgent: agent
  })
    .then((response) => {
      const lights = [];
      for (const item of response.data.data) {
        for (const service of item.services) {
          if (service.rtype === 'light') {
            const light = {
              rid: service.rid,
              name: item.metadata.name,
              id_v1: item.id_v1
            };
            lights.push(light);
          }
        }
      }
      const jsonData = JSON.stringify(lights);
      mainWindow.webContents.send('lights-data', jsonData);
    })
    .catch((e) => {
      console.error(e);
    });
}

renderer.js函数发生时,请求被触发,从main.js我得到了我所期望的JSON对象,然而,当我试图在renderer.js端接收它时,如下所示:

ipcRenderer.on('lights-data', (event, jsonData) => {
  console.log('Trying to display data');
  console.log(jsonData);
});

这是预加载:

const { contextBridge, ipcRenderer } = require('electron');

contextBridge.exposeInMainWorld('ipcRenderer', {
  send: (channel, data) => ipcRenderer.send(channel, data),
  on: (channel, func) => ipcRenderer.on(channel, (event, ...args) => func(...args))
});

这就是我得到的结果

任何帮助或指针将是伟大的!先谢谢你了!

vsdwdz23

vsdwdz231#

您共享的预加载显示您的on函数没有将event传递给回调。您得到undefined,因为您没有记录正确的参数。这应该可以工作:

ipcRenderer.on('lights-data', (jsonData) => {
  console.log('Trying to display data');
  console.log(jsonData);
});

相关问题