## API Proxy Mock 基于 Node.js 的轻量级 **HTTP 代理 + 本地 Mock**:在 `config.json` 里配置要拦截的路径和本地文件,其余请求通过 **HTTPS** 转发到真实后端。 ### 功能说明 - **代理转发**:未命中 Mock 的请求会转发到 `config.targetHost`(HTTPS,`targetPort` 可配,默认 443)。 - **本地 Mock**:命中路由时直接读取 `mock` 目录下的文件作为响应体。 - **Mock 总开关**:`mockEnabled` 为 `false` 时**不拦截**任何 Mock 路由,全部走代理。 - **热更新**:`reloadOnChange` 为 `true` 时监听 `config.json` 变更并自动重载;也可通过管理接口手动重载。 - **Mock 响应**:带简单 CORS 头,以及 `X-Mock-Source`、`X-Mock-Timestamp` 便于排查。 ### 环境要求 - Node.js(建议 18+) - 依赖见 `package.json`:`typescript`、`ts-node`、`@types/node`(仅开发/类型) ### 安装与启动 ```bash npm install ``` 推荐使用 npm 脚本(使用项目内 `tsconfig.json`,避免 `tsc .\某文件.ts` 触发 TS5112): ```bash npm run dev # 或 npm start ``` 等价于: ```bash npx ts-node --project tsconfig.json ./index.api.ts ``` 类型检查(不生成 JS): ```bash npm run typecheck ``` 启动成功后,控制台会输出本地监听地址、目标主机与配置文件路径等。 ### 配置文件 `config.json` 与 `index.api.ts` 同目录。若首次运行不存在,程序会生成一份默认配置。 基础结构示例: ```json { "routes": { "/api/example": "mock/example.txt" }, "config": { "mockEnabled": true, "cacheConfig": true, "reloadOnChange": true, "defaultContentType": "application/json", "proxyPort": 8877, "targetHost": "example.com", "targetPort": 443 } } ``` #### `routes` | 说明 | | | --- | --- | | **key** | 请求路径,只匹配 **pathname**(不含域名;查询串不参与匹配),例如 `"/api/user/info"`。 | | **value** | 相对项目根目录(与 `index.api.ts` 同级)的文件路径,例如 `"mock/user.txt"`。 | | **注释** | 以 **`#`** 开头的 key 视为注释,**不参与** Mock。例如 `"#/api/old": "mock/x.txt"` 会被忽略。 | #### `config` | 字段 | 说明 | | --- | --- | | `mockEnabled` | 可选。为 `false` 时关闭 Mock,所有请求走代理;缺省为 `true`。 | | `cacheConfig` | 保留字段;当前实现中未参与逻辑,可忽略或与旧配置兼容。 | | `reloadOnChange` | 是否监视 `config.json` 文件变化并自动重新加载。 | | `defaultContentType` | Mock 成功时的 `Content-Type`,常用 `"application/json"`。 | | `proxyPort` | 本机 HTTP 代理监听端口。 | | `targetHost` | 上游 HTTPS 主机名(不含协议与路径)。 | | `targetPort` | 可选。上游 HTTPS 端口,**缺省为 443**。非 443 时请在配置中显式写出。 | ### 管理接口 将 `` 换为 `config.proxyPort` 中的值: | 方法 | 路径 | 说明 | | --- | --- | --- | | `GET` | `http://localhost:/__config` | 查看当前路由与配置 | | `POST` | `http://localhost:/__reload-config` | 手动重新加载 `config.json` | ### TypeScript 与编译说明 - 项目根目录包含 `tsconfig.json`,请使用 **`tsc -p .`** 或 **`npm run typecheck`** 做整项目检查。 - **不要**使用 `tsc .\index.api.ts` 这类「命令行附带单个文件」的方式,否则会与 `tsconfig.json` 冲突并报 **TS5112**。 ### 目录说明 - `index.api.ts`:服务入口。 - `config.json`:路由与运行参数。 - `mock/`:Mock 响应文件(文本内容原样返回,按需自行写成 JSON 等)。