UNPKG

env-manage-plugin

Version:

A dev env plugin that integrates an Express server with request proxying capabilities.

134 lines (133 loc) 5.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const express_1 = tslib_1.__importDefault(require("express")); const libCookie = tslib_1.__importStar(require("cookie")); const Utils_js_1 = tslib_1.__importDefault(require("./Utils.js")); const Config_js_1 = require("./Config.js"); const PreProxyServer_js_1 = tslib_1.__importDefault(require("./PreProxyServer.js")); class ManageRouter { constructor() { this.config = new Config_js_1.Config(); this.router = express_1.default.Router(); this.initializeRoutes(); } initializeRoutes() { // 启动/停止服务器 this.router.post("/manage-server", express_1.default.json(), this.handleManageServer.bind(this)); // 获取环境列表 this.router.get("/getlist", this.handleGetList.bind(this)); // 获取开发服务器列表 this.router.get("/get-dev-server-list", this.handleGetDevServerList.bind(this)); // 更新开发服务器ID this.router.post("/update-dev-server-id", express_1.default.json(), this.handleUpdateDevServerId.bind(this)); // 用于检查是否重复启动 this.router.get("/are-you-ok", (req, res) => { res.send(JSON.stringify(this.config)); }); // 用于 清除代理 的cookie this.router.get("/clear-proxy-cookie", this.handleClearProxyCookie.bind(this)); } // 处理服务器管理请求 handleManageServer(req, res) { const { action, name, port } = req.body; if (!action || !name || !port) { return res .status(400) .json({ error: "缺少 action 或 name 或 port 参数" }); } const envKey = Utils_js_1.default.getRowKey(req.body); const env = this.config.envMap.get(envKey); if (!env) { return res.status(400).json({ error: "环境不存在,请刷新" }); } switch (action) { case "start": return this.handleStartServer(env, res); case "stop": return this.handleStopServer(env, res); default: return res.status(400).json({ error: "无效的 action 参数" }); } } // 处理启动服务器 async handleStartServer(env, res) { const port = env.port; if (PreProxyServer_js_1.default.appMap[port]) { await PreProxyServer_js_1.default.stopServer(env.port); } PreProxyServer_js_1.default.create(env); return res.json({ message: `环境 【${env.name}】 在端口 【${port}】 已启动`, }); } // 处理停止服务器 handleStopServer(env, res) { return PreProxyServer_js_1.default.stopServer(env.port) .then(() => { return res.json({ message: `环境 【${env.name}】 在端口 【${env.port}】 已关闭`, }); }) .catch((err) => { console.error(err); return res.status(500).json({ error: "停止服务器失败" }); }); } /** * 手动清除代理 cookie * @param req * @param res */ handleClearProxyCookie(req, res) { const cookies = req.headers.cookie; if (cookies) { const cookieArr = libCookie.parse(cookies); Object.keys(cookieArr).forEach((cookieName) => { if (cookieName.endsWith(this.config.envmConfig.cookieSuffix)) { res.appendHeader("Set-Cookie", `${cookieName}=; max-age=0; path=/`); } }); } res.send({ message: "Prefixed cookies cleared successfully.", }); } // 处理获取环境列表 handleGetList(req, res) { const list = Array.from(this.config.envMap.values()); return res.json({ list }); } // 处理获取开发服务器列表 handleGetDevServerList(req, res) { const list = Array.from(this.config.devServerMap.values()); return res.json({ list }); } // 处理更新开发服务器ID handleUpdateDevServerId(req, res) { const { devServerName, name, port } = req.body; if (!devServerName || !name || !port) { return res.status(400).json({ error: "缺少 devServerName 或 name 或者 port 参数", }); } const envKey = Utils_js_1.default.getRowKey(req.body); const envItem = this.config.envMap.get(envKey); if (!envItem) { return res.status(400).json({ error: "环境不存在,请刷新" }); } const devServerKey = Utils_js_1.default.getRowKey({ name: devServerName }); const devServerItem = this.config.devServerMap.get(devServerKey); if (!devServerItem) { return res.status(400).json({ error: "devServer 不存在,请刷新" }); } envItem.devServerName = devServerName; return res.json({ message: `环境 【${name}】 在端口 【${port}】 已经切换到 【${devServerItem.name}】`, }); } getRouter() { return this.router; } } exports.default = ManageRouter;