## API Proxy Mock 基于 Node.js 的轻量级 **HTTP 代理 + 本地 Mock**:所有配置(路由映射、服务器参数、接口列表)统一存储在 SQLite,mock 内容保存在 `mock/` 目录文件中,其余请求按配置(HTTP/HTTPS)转发到真实后端。通过 `__admin` 管理面板进行可视化管理。 ### 功能说明 - **代理转发**:未命中 Mock 的请求会转发到 `config.targetHost`(由 `targetHttps` 决定 HTTP/HTTPS,`targetPort` 可配)。 - **本地 Mock**:命中路由时直接读取 `mock` 目录下的文件作为响应体。 - **SQLite 存储**:路由列表、接口列表、服务器配置全部存储在 `data/mock-mappings.sqlite3`。 - **Mock 总开关**:`mockEnabled` 为 `false` 时**不拦截**任何 Mock 路由,全部走代理。 - **Mock 响应**:带简单 CORS 头,以及 `X-Mock-Source`、`X-Mock-Timestamp` 便于排查。 - **管理面板**:访问 `/__admin` 进入 Element UI 可视化管理界面。 ### 环境要求 - Node.js(建议 18+) - 依赖见 `package.json`:`typescript`、`ts-node`、`@types/node`(仅开发/类型)、`sqlite3` ### 安装与启动 ```bash npm install ``` 推荐使用 npm 脚本: ```bash npm run dev # 或 npm start ``` 等价于: ```bash npx ts-node --project tsconfig.json ./index.api.ts ``` 类型检查(不生成 JS): ```bash npm run typecheck ``` 启动成功后,控制台会输出本地监听地址、目标主机等。 ### 数据存储 所有配置统一存储在 SQLite 数据库 `data/mock-mappings.sqlite3` 中: | 表名 | 用途 | | --- | --- | | `route_mappings` | 路由 → mock 文件映射 + 状态码 | | `api_list` | 接口名称清单 | | `mock_files` | mock 文件路径 + 别名 | | `server_config` | 服务器配置(端口、目标主机等) | 首次启动时,如果 `mock/api-list.json` 存在,会自动迁移导入到数据库。 ### 管理接口 将 `` 换为实际监听端口: | 方法 | 路径 | 说明 | | --- | --- | --- | | `GET` | `http://localhost:/__config` | 查看当前路由与配置 | | `POST` | `http://localhost:/__config` | 保存配置(服务器配置 + 路由) | | `POST` | `http://localhost:/__reload-config` | 从数据库重新加载配置 | | `POST` | `http://localhost:/__routes` | 动态新增单个路由与 mock 文件 | | `GET` | `http://localhost:/__api-list` | 获取接口列表 | | `GET/POST/DELETE` | `http://localhost:/__mock-files` | 管理 mock 文件 | | `GET` | `http://localhost:/__admin` | 配置管理页面(Element UI) | #### `POST /__routes` 请求示例 ```json { "route": "/api/new/mock", "filePath": "mock/new-api.json", "fileContent": "{\"code\":0,\"message\":\"ok\"}", "overwrite": false } ``` #### `POST /__config` 请求示例 ```json { "config": { "proxyPort": 8879, "targetHost": "192.168.3.9", "targetPort": 8092, "targetHttps": false, "defaultContentType": "application/json", "mockEnabled": true } } ``` ### TypeScript 与编译说明 - 项目根目录包含 `tsconfig.json`,请使用 **`tsc -p .`** 或 **`npm run typecheck`** 做整项目检查。 - **不要**使用 `tsc .\index.api.ts` 这类「命令行附带单个文件」的方式,否则会与 `tsconfig.json` 冲突并报 **TS5112**。 ### 目录说明 - `index.api.ts`:服务入口。 - `src/`:模块化源码(types、db、config、proxy、admin-handlers 等)。 - `mock/`:Mock 响应文件(文本内容原样返回,按需自行写成 JSON 等)。 - `data/mock-mappings.sqlite3`:SQLite 数据库(路由映射、接口列表、服务器配置)。