本文介绍在 Electron 应用中直接引入 Node.js 后端服务的实现方法。通过创建 Express 路由并启动 HTTP 服务,Electron 主进程可直接调用接口。重点解决打包后常见的依赖缺失及跨域报错问题,包括配置 webSecurity 和手动处理依赖包的策略。
本文不赘述 Electron 的基础配置,核心在于如何在 Electron 主进程中直接引入 Node.js 服务,这一过程相对简单。
首先需要准备一个 Node.js 服务环境。
项目结构中需创建两个核心文件:index.js 用于服务启动,router.js 用于路由定义。
index.js 负责初始化 Express 应用、引入路由模块、设置端口并创建 HTTP 服务器监听请求。
const express = require("express");
const router = express.Router();
// 引入全局对象
var path = require("path");
const indexRouter = require("./router.js");
// 声明创建
let http = require("http");
let port = 3000;
// 建立网站服务器
var app = express();
// 引入路由
app.use(indexRouter);
app.set("port", port);
// 创建 HTTP 服务器并监听 port 端口的所有请求
var server = http.createServer(app);
server.listen(port);
console.log("启动成功:端口" + port);router.js 定义具体的 API 路由逻辑,例如处理 GET 请求并返回 JSON 数据。
// 1、导入express模块
const express = require("express");
// 2、创建路由对象
const router = express.Router();
// 3、挂载具体的路由
router.get("/test", (req, res) => {
res.send({
code: 200,
data: "访问成功!",
});
});
// 4、向外导出路由
module.exports = router;在终端执行 node index.js 命令以启动 Node 服务。

服务启动后,通过浏览器访问对应接口即可看到成功返回的数据。

接下来在 Electron 的主进程代码中引入上述 Node 服务模块。

启动 Electron 应用后,后台 Node 服务将同步运行,实现前后端交互。

由于 Electron 默认未内置 jQuery 和 Axios,开发阶段可直接通过浏览器访问接口;若前端使用 Vue 等项目,建议配置代理进行访问。

注意:应用打包后直接调用接口可能会遭遇跨域报错,此时需在 Electron 打包配置中设置 webPreferences 对象,并将 webSecurity 属性设为 true 以禁用安全限制。

完成上述配置后,进行应用打包运行测试。
常见问题一:打包后出现依赖缺失报错。
打包过程中常遇到缺少依赖的错误,这通常是因为 Electron 打包工具未自动递归打包 Node 模块的嵌套依赖所致。


一种可行的解决方案是手动将 express 的相关依赖文件复制至项目目录,然后重新执行 cnpm i 安装;或者根据报错提示逐个下载缺失的依赖包。如有更优方案,欢迎交流。

"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.2.0",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.7",
"qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
"serve-static": "1.15.0",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2",
"ee-first": "1.1.1"常见问题二:服务关闭与历史包清理。

在测试结束后,需手动关闭 Node 服务进程以释放资源。


至此,关于在 Electron 中引入 Node 服务的完整流程及打包注意事项已介绍完毕,更多相关内容可参考本站其他文章。