繁体   English   中英

使用Node.js逻辑创建电子应用程序

[英]Creating an Electron Application with Node.js Logic

我已经练习使用Electron几个月了,我想知道如何将我之前制作的Node.js网页项目转换为Electron应用程序。 在我的Node.js网页中,我使用了像

app.get('/' function(req, res){
    res.render('loginpage');
}
app.post('/loginCredentials', function(req, res){
    /*Make sure req.body.username and req.body.password are valid*/
    res.render('home');
}

同样在我的Node.js应用程序中,每当用户想要查看数据库结果时,我在Node.js网页中查询数据库,并在渲染时将变量发送到网页。

但是在Electron,我不知道如何处理这样的请求。如果我想制作一个Electron应用程序,我是否必须自己在网页文件中处理所有这些,或者Electron是否有一些app.get / app.post方法?

或者,有没有办法让我的Node.js网页加载在像Electron应用程序这样的浏览器窗口中?

先感谢您

更新1; ipcMain模块功能:

在我的电子main.js文件中,我有以下代码:

const {ipcMain} = require('electron')
ipcMain.on('hello', (event, arg) => {
    console.log(arg)
    event.returnValue = 'pong'
})

在我的网页中,位于'./views'目录中,我有以下代码:(它是一个哈巴狗文件,它正确呈现)

input(type ='submit', value ='Submit', onclick = "handleClick()")
...
script.  
    const {ipcRenderer} = require('electron')
    function handleClick(){    
        var x = ipcRenderer.sendSync('hello', 'ping')
        console.log(x) 
    }

在做出以下更改之前,我一直收到错误(显示在问题的底部)。 我变了:

const ipcMain = require('electron') 

const {ipcMain} = require('electron')

显然,括号必须在模块周围才能正确导入。

存在的错误但已修复:

Uncaught TypeError: ipcRenderer.sendSync is not a function
    at handleClick (loginpage.pug:64)
    at HTMLInputElement.onclick 

ipcMain是Electron中一个有用的方面,它模仿Node.js中的app.get / app.post

虽然技术上可以将Node.js作为Electron应用程序的后端,但它将是一个重手段的解决方案,不建议使用。

而不是发布/获取请求,Electron的EventEmitter类的实例通常用于前端和后端之间的通信。 使用后端的ipcMain模块和前端的ipcRenderer来交换任何类型的数据。 实际上,消息可以同步或异步发送。

例如,来自Electron的文档

// In main process.
const {ipcMain} = require('electron')
ipcMain.on('asynchronous-message', (event, arg) => {
  console.log(arg)  // prints "ping"
  event.sender.send('asynchronous-reply', 'pong')
})

ipcMain.on('synchronous-message', (event, arg) => {
  console.log(arg)  // prints "ping"
  event.returnValue = 'pong'
})

// In renderer process (web page).
const {ipcRenderer} = require('electron')
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong"

ipcRenderer.on('asynchronous-reply', (event, arg) => {
  console.log(arg) // prints "pong"
})
ipcRenderer.send('asynchronous-message', 'ping')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM