前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >electron集成nodejs后端服务时使用随机端口

electron集成nodejs后端服务时使用随机端口

作者头像
薛定喵君
发布2023-07-11 14:15:49
7710
发布2023-07-11 14:15:49
举报
文章被收录于专栏:薛定喵君

记录如何在开发electron应用时使用随机端口

# 背景

最近使用electron-tabs开发小工具时遇到了测试用户提示端口冲突的问题。

因为工具是使用nodejs作为后端服务,并且指定了端口号,所以就存在与用户本地其它服务端口冲突的可能。

# 解决方法

在electron项目中启动nodejs服务可以通过直接require服务文件的方式,通过启动node服务时监听0端口就可以实现随机端口号,但是随机出来的端口如何获取到并在渲染进程中使用呢。

我们需要进行如下改造:

  1. 在nodejs服务主程序中另写一个promise函数监听端口0来启动服务:

server.listen(0)可以实现自动分配端口

代码语言:javascript
复制
let port = 0
class AppServer {
  start() {
    return new Promise((resolve, reject) => {
      let server = app.listen(0, function () {
        let host = server.address().address;
        port = server.address().port;
        console.log('address: http://localhost:%s', port);
        resolve(port);
      });
    })
  }
}
module.exports = AppServer;
  1. 然后在electron的主进程main.js中引用noe服务并await方式调用node服务的启动函数,注意将端口号拼接在窗口加载url中。
代码语言:javascript
复制
let AppServer = require('../server');
const appServer = new AppServer();
const port = await appServer.start();
mainWindow.loadURL("file://" + __dirname + "/electron-tabs.html?" + port);
  1. 页面上获取端口号:通过location.href来获取。
代码语言:javascript
复制
const port = location.href.split('?')[1]
const tabGroup = document.querySelector("tab-group");
tabGroup.on("ready", () => console.info("TabGroup is ready"));

tabGroup.setDefaultTab({
  title: "demo",
  src: "http://localhost:" + port + "/test.html",
  ready: () => console.info("New Tab is ready"),
});
  1. 然后启动程序我们就可以在渲染的页面中获取到随机的端口号了。

# 参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/07/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 背景
  • # 解决方法
  • # 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档