ServiceManager 使用文档
本地 exe 服务管理工具,支持状态查询、启动、停止。
文件说明
| 文件 |
说明 |
ServiceManager.js |
编译后的 JavaScript 类,可直接在浏览器或 Node.js 使用 |
ServiceManager.d.ts |
TypeScript 类型声明文件 |
ServiceManager.ts |
TypeScript 源码 |
test.html |
功能演示页面 |
快速开始
1. 引入类
浏览器(ES Module)
<script type="module">
import { ServiceManager } from './ServiceManager.js';
</script>
Node.js
// 如果使用 Node.js,需要处理 fetch 兼容
// 推荐使用 node-fetch 或 axios
2. 基本使用
// 创建实例
const sm = new ServiceManager('http://127.0.0.1:5000');
// 查询所有服务状态
const services = await sm.getServicesStatus();
console.log(services);
// 启动服务
await sm.startService('watchdog');
// 停止服务
await sm.stopService('watchdog');
API 参考
静态方法
| 方法 |
说明 |
ServiceManager.enableDebug() |
开启 DEBUG 模式,浏览器控制台输出详细日志 |
ServiceManager.disableDebug() |
关闭 DEBUG 模式 |
ServiceManager.isDebugEnabled() |
返回当前 DEBUG 状态 |
实例方法
配置
| 方法 |
参数 |
说明 |
setBaseUrl(url) |
url: string |
设置 API 地址 |
getBaseUrl() |
- |
获取当前 API 地址 |
setPollInterval(ms) |
ms: number |
设置自动刷新间隔(毫秒) |
getPollInterval() |
- |
获取当前间隔 |
状态查询
| 方法 |
参数 |
返回 |
说明 |
getServicesStatus() |
- |
Promise<ServiceInfo[]> |
获取所有服务状态 |
getServiceStatus(id) |
id: string |
Promise<ServiceInfo | null> |
获取单个服务状态 |
isConnected() |
- |
boolean |
获取连接状态 |
服务控制
| 方法 |
参数 |
返回 |
说明 |
startService(id) |
id: string |
Promise<boolean> |
启动服务 |
stopService(id) |
id: string |
Promise<boolean> |
停止服务 |
自动刷新
| 方法 |
参数 |
说明 |
startAutoRefresh(callback) |
callback?: (services) => void |
启动自动刷新 |
stopAutoRefresh() |
- |
停止自动刷新 |
isAutoRefreshRunning() |
- |
返回自动刷新状态 |
事件与日志
| 方法 |
参数 |
说明 |
setOnStatusChange(callback) |
callback: (service) => void |
设置状态变化回调 |
getLogs() |
- |
获取所有日志 |
clearLogs() |
- |
清空日志 |
destroy() |
- |
销毁实例 |
类型定义
interface ServiceInfo {
id: string;
name: string;
exe_path: string;
running: boolean;
pid: number | null;
port: number | null;
port_open: boolean | null;
status: 'running' | 'stopped';
}
interface LogEntry {
time: string;
level: 'info' | 'success' | 'error' | 'warn' | 'debug';
message: string;
data?: any;
}
完整示例
// 1. 开启 DEBUG(在浏览器控制台查看详细日志)
ServiceManager.enableDebug();
// 2. 创建实例
const sm = new ServiceManager('http://127.0.0.1:5000');
// 3. 设置轮询间隔(可选,默认 3000ms)
sm.setPollInterval(5000);
// 4. 设置状态变化回调
sm.setOnStatusChange((service) => {
console.log(`${service.name} 状态变化: ${service.status}`);
if (service.running) {
console.log(`PID: ${service.pid}`);
}
});
// 5. 启动自动刷新
sm.startAutoRefresh((services) => {
services.forEach(s => {
console.log(`${s.name}: ${s.status}`);
});
});
// 6. 或者手动查询
const services = await sm.getServicesStatus();
await sm.startService('watchdog');
await sm.stopService('watchdog');
// 7. 查看日志
const logs = sm.getLogs();
console.log(logs);
// 8. 停止自动刷新
sm.stopAutoRefresh();
// 9. 销毁实例
sm.destroy();
依赖后端
本工具需要配合 Flask 后端使用,后端需要提供以下 API:
| 端点 |
方法 |
说明 |
/api/services |
GET |
获取所有服务状态 |
/api/services/<id> |
GET |
获取单个服务状态 |
/api/services/<id>/start |
POST |
启动服务 |
/api/services/<id>/stop |
POST |
停止服务 |
后端返回格式:
{
"code": 0,
"data": [{
"id": "watchdog",
"name": "🔐 安全控件",
"exe_path": "C:\\path\\to\\watchdog.exe",
"running": true,
"pid": 1234,
"status": "running"
}]
}