let net = require("net"); const express = require("express"); const path = require("path"); const { ipcMain } = require('electron'); // const bodyParser = require("body-parser"); import { GetHomeDir } from "./config"; let SERVER_PORTS = 55110; /** * 检测端口是否被占用 * @param port * @param cb */ function portIsOccupied(port, cb) { // 创建服务并监听该端口 port = Number(port); let server = net.createServer().listen(port); server.on("listening", function() { // 执行这块代码说明端口未被占用 server.close(); // 关闭服务 console.log("端口【" + port + "】 可用"); // 控制台输出信息 SERVER_PORTS = port; cb(port); }); server.on("error", function(err) { if (err.code === "EADDRINUSE") { // 端口已经被使用 console.log("端口【" + port + "】 被占用"); portIsOccupied(++port, cb); } }); } let apps; let availablePort function createApp() { apps = express(); // app.use(bodyParser.json()); // app.use(bodyParser.urlencoded({ extended: true })); let prefix = process.env.NODE_ENV === "development" ? "" : "resources/app.asar/out/renderer/"; let static_path = ["./", "src/renderer/public"]; let home_dir = GetHomeDir(); static_path.forEach((p) => { apps.use( express.static( path.join(path.join(home_dir, prefix), p) /*{maxAge: 60 * 1000 * 5}*/ ) ); }); } function start() { createApp(); portIsOccupied(SERVER_PORTS, (port) => { // avilablePort挂载全局 // console.log(apps); apps.listen(port); availablePort = port; // console.log("global.sharedObject", global.avilablePort); global.sharedObject.availablePort = port; // ipcRenderer.invoke("set-global-variable", "avilablePort", avilablePort); }); } //获取项目根目录 // function GetHomeDir() { // let HOME_DIR = process.cwd() // if (process.env.NODE_ENV === 'production') { // let arr = process.execPath.replaceAll("\\", "/").split("/") // arr.pop() // HOME_DIR = arr.join("/") // } // return HOME_DIR // } ipcMain.handle('get-available-port', () => { return availablePort; }); export { apps, start };