API Proxy Mock

基于 Node.js 的轻量级 HTTP 代理 + 本地 Mock:路由与 mock 文件路径映射存储在 sqlite3mock 内容仍保存在 mock/ 目录文件中其余请求按配置HTTP/HTTPS转发到真实后端。

功能说明

  • 代理转发:未命中 Mock 的请求会转发到 config.targetHost(由 targetHttps 决定 HTTP/HTTPStargetPort 可配)。
  • 本地 Mock:命中路由时直接读取 mock 目录下的文件作为响应体。
  • SQLite 映射:路由列表、接口列表存储在 mock/mock-mappings.sqlite3,数据库只保存路由与文件路径/目录关系。
  • Mock 总开关mockEnabledfalse不拦截任何 Mock 路由,全部走代理。
  • 热更新reloadOnChangetrue 时监听 config.json 变更并自动重载;也可通过管理接口手动重载。
  • Mock 响应:带简单 CORS 头,以及 X-Mock-SourceX-Mock-Timestamp 便于排查。

环境要求

  • Node.js建议 18+
  • 依赖见 package.jsontypescriptts-node@types/node(仅开发/类型)

安装与启动

npm install

推荐使用 npm 脚本(使用项目内 tsconfig.json,避免 tsc .\某文件.ts 触发 TS5112

npm run dev
# 或
npm start

等价于:

npx ts-node --project tsconfig.json ./index.api.ts

类型检查(不生成 JS

npm run typecheck

启动成功后,控制台会输出本地监听地址、目标主机与配置文件路径等。

配置文件 config.json

index.api.ts 同目录。若首次运行不存在,程序会生成一份默认配置。

基础结构示例:

{
  "routes": {
    "/api/example": "mock/example.txt"
  },
  "config": {
    "mockEnabled": true,
    "cacheConfig": true,
    "reloadOnChange": true,
    "defaultContentType": "application/json",
    "proxyPort": 8877,
    "targetHost": "example.com",
    "targetPort": 443,
    "targetHttps": true
  }
}

routes

routes 仍会出现在接口返回中用于兼容旧面板;实际持久化以 sqlite 为准。

说明
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 上游主机名(不含协议与路径)。
targetPort 可选。上游端口;当 targetHttps=true 缺省为 443,当 targetHttps=false 缺省为 80
targetHttps 可选。是否使用 HTTPS 连接上游;true 为 HTTPSfalse 为 HTTP。缺省为 true

管理接口

<proxyPort> 换为 config.proxyPort 中的值:

方法 路径 说明
GET http://localhost:<proxyPort>/__config 查看当前路由与配置
POST http://localhost:<proxyPort>/__config 保存 config.json(包含 routesconfig
POST http://localhost:<proxyPort>/__reload-config 手动重新加载 config.json
POST http://localhost:<proxyPort>/__routes 动态新增单个路由与 mock 文件
GET http://localhost:<proxyPort>/__admin 配置管理页面Element UI

POST /__routes 请求示例

{
  "route": "/api/new/mock",
  "filePath": "mock/new-api.json",
  "fileContent": "{\"code\":0,\"message\":\"ok\"}",
  "overwrite": false
}

TypeScript 与编译说明

  • 项目根目录包含 tsconfig.json,请使用 tsc -p .npm run typecheck 做整项目检查。
  • 不要使用 tsc .\index.api.ts 这类「命令行附带单个文件」的方式,否则会与 tsconfig.json 冲突并报 TS5112

目录说明

  • index.api.ts:服务入口。
  • config.json:路由与运行参数。
  • mock/Mock 响应文件(文本内容原样返回,按需自行写成 JSON 等)。
  • mock/mock-mappings.sqlite3:路由/接口与 mock 文件路径映射(不保存 mock 内容)。
Description
支持mock数据的代理服务器
Readme 5.7 MiB
Languages
TypeScript 52.6%
HTML 47.4%