const { log } = require('console'); const express = require('express'); const axios = require('axios'); const shell = require('shelljs'); const app = express(); const config = require('./config'); app.use(express.json()); // 身份验证中间件 const authMiddleware = (req, res, next) => { // const token = req.headers['x-api-key']; // if (token !== process.env.API_KEY) { // return res.status(403).json({ error: '未授权访问' }); // } next(); }; // 部署接口 app.get('/api/doDeploy', authMiddleware, (req, res) => { let project = req.query.project; let env = req.query.env; const dir = config[env].dir; let cmd = `cd ${dir}/${project} && sh restart.sh ${project}`; const child = shell.exec(cmd, { async: true, silent: false }); child.stdout.on('data', (data) => { // 实时推送日志(需配合 WebSocket 或 SSE) // console.log(`实时输出: ${data}`); }); child.on('close', (code) => { console.log(`执行结束: ${code}`); }); res.json({ code: 0, msg: "执行中" }); }) // 部署接口 app.get('/api/deploy', authMiddleware, async (req, res) => { let query = req.query; console.log('query', query); //从query字符串中获取project参数 let project = query.project; let env = query.env; console.log("project", project, ",env", env); if (!project) { return res.status(200).json({ code: 1, msg: 'project项目参数错误' }); } if (!env) { return res.status(200).json({ code: 1, msg: 'env项目参数错误' }); } const dir = config[env].dir; const ipList = config[env].ipList; //发起http请求 try { let promiseAll = []; for (let ip of ipList) { promiseAll.push(axios.get(`http://${ip}:7015/api/doDeploy?project=${project}&env=${env}`)); } let result = await Promise.all(promiseAll); return res.json({ code: 0, msg: `${project}部署中` });; // 将第三方 API 数据返回客户端 } catch (error) { log(error); return res.status(500).json({ error: '请求失败' }); } }); app.listen(7015, () => console.log('服务运行中: http://localhost:7015'));