Files
tianshu-engine/electron/server.js
2026-06-10 14:16:46 +08:00

66 lines
1.6 KiB
JavaScript

const express = require('express')
const path = require('path')
const net = require('net')
const appHttp = express()
const START_PORT = 9527
const MAX_PORT = 9999
// 检查端口是否可用
function isPortAvailable(port) {
return new Promise((resolve) => {
const server = net.createServer()
server.listen(port, '127.0.0.1', () => {
server.once('close', () => resolve(true))
server.close()
})
server.on('error', () => resolve(false))
})
}
// 寻找可用端口
async function findAvailablePort(startPort, maxPort) {
for (let port = startPort; port <= maxPort; port++) {
const available = await isPortAvailable(port)
if (available) {
return port
}
}
throw new Error(`No available port found between ${startPort} and ${maxPort}`)
}
// 获取 dist 目录路径
let distPath
if (process.env.NODE_ENV === 'development') {
// 开发环境
distPath = path.join(__dirname, '..', 'dist')
} else {
// 生产环境(打包后)
distPath = path.join(__dirname, 'dist')
}
console.log('Serving static files from:', distPath)
// 提供静态文件
appHttp.use(express.static(distPath))
// 启动服务器
async function startServer() {
try {
const PORT = await findAvailablePort(START_PORT, MAX_PORT)
const server = appHttp.listen(PORT, '127.0.0.1', () => {
console.log(`✅ Local server running at http://127.0.0.1:${PORT}`)
})
// 导出服务器实例和端口,以便在需要时关闭
return { server, PORT }
} catch (error) {
console.error('❌ Failed to start server:', error.message)
throw error
}
}
// 导出启动函数
module.exports = { startServer }