javascript - 使用 Node.js 逻辑创建 Electron 应用程序

标签 javascript jquery node.js get electron

我已经练习使用 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 模块函数:

在我的 electron 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 应用程序的后端在技术上是可行的,但这将是一个笨拙的解决方案,因此不推荐。

代替 post/get 请求,Electron 的 EventEmitter 类的实例通常用于前端和后端之间的通信。在后端使用 ipcMain 模块,在前端使用 ipcRenderer 来交换任何类型的数据。事实上,消息既可以同步发送,也可以异步发送。

例如,来自 Electron 的 documentation :

// 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')

关于javascript - 使用 Node.js 逻辑创建 Electron 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48819313/

相关文章:

javascript - 数据表用一个空格替换 2+ 个空格 + 我可以停止吗?

node.js - 检查 ID 是否存在于带有 mongoose 的集合中

javascript - JestJS:如何测试嵌套(异步)函数中的调用函数

javascript - 获取 ionic4 中 ion-select-option 的名称

jquery - 使用新数据重新加载 jqGrid

javascript - 如何通过在搜索栏中输入邮政编码来显示 API 数据?

node.js - 将用户图像上传到 s3 并从 Node 生成缩略图

javascript - 如何搜索两个数组并查找是否匹配?

javascript - 如何使元素指令相对于 ng-repeated 项目的位置?

javascript - 多种图像尺寸与浏览器图像调整大小/缩放