# 更新日志
本程序更新日志, 以月为目录, 模块为子目录来叙述, 为了获得更好的使用体验和功能, 建议及时更新.
TIP
- 使用
npm i -g mockm
更新版本. - 使用
npm i -g mockm@版本号
例如mockm@1.1.3
回退到指定版本.
# 2022 年 12 月
# v1.1.26
- server
- feat(log): 提升 log 容错性
- fix(log): 当调用栈中的项不含括号地不应匹配不到
- feat: config 函数支持 async
- feat: 支持路由别名
# 2022 年 11 月
# v1.1.26-alpha.43
- server
- feat: 当提供的配置若不存在则从示例配置自动创建
- feat: 支持 https 配置
- 不兼容的更新
- 不再导出 util.server.httpServer, 这是因为需要根据 https 配置动态生成 httpServer, 所以不能在 config 初始化前导出. 在初始后可以通过 util.server.app._server.httpServer 访问到.
- 要求 node v12+, 这是 httpolyglot 这个依赖规定的
- 不兼容的更新
- feat: 更新自动安装依赖的逻辑
- 不兼容的更新
- 指定镜像地址 的环境变量使用 MOCKM_REGISTRY 而不是 NPM_CONFIG_REGISTRY
- 实时显示当前安装进程
- 不兼容的更新
# v1.1.26-alpha.42
- feat: 不使用 json-server 的依赖清除功能 #885 (opens new window)
# v1.1.26-alpha.40
- fix: config.db 嵌套操作时不应 404
# 2022 年 10 月
- chore: 升级依赖 @wll8/express-ws
# 2022 年 09 月
# v1.1.26-alpha.39
- feat: 提高稳健性, 当自定义的 api 错误时不应导致服务崩溃
- feat: 允许向外网映射程序传送 authtoken
- doc: upload
# 2022 年 08 月
# v1.1.26-alpha.38
- feat: 把 ngrok 重新放回 pluginDependencies 中
不应放置于 optionalDependencies 中, 因为安装它的过程可能会十分漫长, 体验非常差.- 不再使用 NGROK_CDN_URL, 因为它不稳定
- 不再使用 --registry 参数, 因为某些管理器要求此值与 lock 中的值一致
- 不再使用 npx , 因为它在新版本需要交互式确认
- 不再使用 --no-save, 因为某些管理器不支持
- fix: --config 参数生成的配置文件中的默认端口改为 9000
因为很多文档和示例已经以 9000 作为示例了, 默认使用其他端口可能会生成误解 - chore: 在编译后的启动信息中插入分支以及 commit hash 以便于追溯历史
- feat: Allows to customize the parameters of bodyParser
- refactor: 移除 lib.fetch
在feat: 不默认安装依赖 node-fetch
这次 commit 中已经不再暴露 lib.fetch - fix: 避免 config.openApi 配置为空数组时出现读取错误
- feat: 调整一些依赖为可选项
注: yarn install 使用 --ignore-optional 或 --production 时依然会请求可选项中的依赖表文件 - feat: 把动态依赖放置于 optionalDependencies
因为动态安装经常不太稳定, 如果放置在可选依赖中则可以在第一次安装时尝试安装它们, 就算安装失败了也没有关系 - fix: hasPackage 不应只检测子级 node_modules
例如全局安装时, npm 会把 node_modules 进行扁平化, 例如 md-cli 依赖了 mockm, 安装 md-cli 时, 只会存在 md-cli/node_modules 而不会存在 md-cli/node_modules/mockm/node_modules .
# 2022 年 07 月
# v1.1.26-alpha.30
- chore: update dependencies
- test: 调整 .only 的检测检测方式
例如describe.only
和it.only
均可 - chore(client): 使用复制方式, 避免目录被占用时无法移动
- test: 给备份 openApi 添加一些时间
- fix: 避免 openApi 未备份完成时访问该文件出现问题
- refactor: 移除 tool 中的 prepareProxy parseProxyTarget
# v1.1.26-alpha.29
- feat: config.static 支持显示目录列表功能
# v1.1.26-alpha.28
- fix: config.proxy 子路径应优先
# v1.1.26-alpha.27
- feat: httpLog 也显示完整年月日
- feat: 使用默认网关的 ip 作为 config.osIp 的默认值
期望在同一个局域网下, 得到大家都可以访问的 ip url, 而不是本机私有 vpn 实现的 ip. - fix: 使用 body-parser 之后某些代理失效, 一直挂起
https://github.com/chimurai/http-proxy-middleware/issues/299 (opens new window)
# 2022 年 06 月
# v1.1.26-alpha.26
- feat: 在 proxy 的根目录默认添加斜杠
- fix(doc): 单词拼写错误, histroy, 改为 history
- feat: 暴露 http 实例到 util 上便于需要时使用
# v1.1.26-alpha.24
- refactor(test): 重构测试用例, 把 api.test 中的 db 相关部分移动到 db.test 中
- feat: 从 config.api 中操作 db
- feat: 冻结 global.config 中的属性
- feat: config.api 中的 use 支持 async
- refactor: 移除未使用的依赖 ws
- feat: resHandleJsonApi 支持使用 Promise
- fix(client): 本地 cdn 目录中的 dist 不应被忽略
# 2022 年 05 月
# v1.1.26-alpha.21
- feat: 将线上 cdn 替换为本地文件, 以避免各种 dns 污染导致的各种 cdn 失效问题
- chore: 使用依赖锁文件
- feat: 简化 --config 参数输出的内容
更改 full.mm.config.js 为 simple.mm.config.js, 让配置看起来更容易使用, 不那么吓人和混乱.
# 2022 年 04 月
# v1.1.26-alpha.17
- feat: 支持从 config.api 拦截 config.db 的接口
参考 config.api 示例中的/books/:id
- fix: config.api 是 config.proxy 的子路径并携带参数时应能覆盖
例如以下配置不应导致/api/test?a=1
不能使用config = { proxy: { "/api/": `http://172.16.203.81/api/`, }, api: { "/api/test": { msg: 123 }, }, };
- refactor: 去除冗余的逻辑
- feat: 支持 config.disablerecord 禁用请求记录
- feat: 未启动进程守护时, 遇到错误连同父进程退出
- feat: 在错误日志中保存退出码
- fix: 重载时 global.INJECTION_REQUEST 中的值不应丢失
- server 应该把值保存在文件中, 而不是变量中
- client 应在请求时获取 INJECTION_REQUEST, 而不是刷新页面才获取
# 2022 年 03 月
# v1.1.26-alpha.10
- server
- fix: 删除 apiWeb 中的空对象, 避免手动编辑 apiWeb 时出现重复的 key
- client
- fix: 处理边缘情况, 前端通过外网访问, 但 server 未启用 remote 时报错
Uncaught TypeError: Failed to construct 'URL': Invalid URL at onComplete (Swagger.jsx:156:1)
- fix: 处理边缘情况, 前端通过外网访问, 但 server 未启用 remote 时报错
# 2022 年 02 月
# v1.1.26-alpha.8
- server
- fix: 在页面上重发请求时提示
重发请求成功 undefined undefined
- feat: 升级依赖
- feat: 调整按需安装的依赖
- fix: 处理获取 openApi 时的边界情况
- refactor: 将依赖 git 仓库的 better-mock 更改为 npm 的 @wll8/better-mock
- fix: 在页面上重发请求时提示
# 2022 年 01 月
# v1.1.26-alpha.2
- server
- feat: 自动安装依赖时, 也显示安装目录. 当安装失败时可以手动执行命令. (#13)
- fix: 在判断是否进行代理时应排除已禁用的 webApi
- fix: 修正根据 eslint 推测的可能引发的错误
- refactor: axios 请求方法应使用实例以便于统一配置 (#36)
- fix: 代理路径后面含有斜杠会出现 404
# 2021 年 12 月
# v1.1.26-alpha.1
- server
- fix: 当 config.api 中的接口与后端接口路径相同时, 应覆盖后端接口 (#12)
- feat: 回放时返回响应体较大的历史请求
- fix: 避免某些请求携带 origin 导致 path-to-regexp 无法解析
- feat: 也存储 http 请求错误日志
- test
- 当发送请求失败时,进行重试
- 提高 cli 启动的超时检测
- 优化错误输出为只显示 msg
- 优化测试代码, 避免
okFn
参数报错
# 2021 年 11 月
# v1.1.25
server
- feat: 升级依赖
- feat: 提高稳健性, 当自定义的 api 错误时不应导致服务崩溃
- feat: 将 httpHistory 中的 head 存储为文件以提升性能
- refactor: 把 history 放到 global 上, 避免各处传参
- refactor: 添加 config.js 的 d.ts 支持
- feat: 避免大于 10 个监听器时出现警告
- fix: 安装依赖成功时不应该显示为红色
- feat: 支持传入 node 运行参数
- fix: 捕获 ws 接口不存在时的错误
- fix: 应正确获取 IPv4 地址
client
- fix: 使用历史数据生成接口时应删除跨域标志
# 2021 年 10 月
# v1.1.25-alpha.18
server
- feat: 更改控制台输出为英文
- feat: 支持命令行参数
--log-line
显示 console.log 所在的行, 用于辅助调试. - feat: 支持命令行参数
--version
仅查看版本号, 然后退出程序, 不启动服务. - feat: config.updateToken 参数支持更多配置
- refactor: 处理接口
:9005/api/getOpenApi/
的返回值 - fix: 处理 test.js 文件中的函数未声明错误
ReferenceError: print is not defined
- fix: config.proxy 非
/
代理时, host 不应是/
的代理 - feat: 优化 openApi 历史文件的存储方式
更改为排序 openApi json 内容后再保存, 因为 openApi 中的顺序不确定会导致比较时产生过多不必要的变更
client
- refactor(client): 去除无用的 state.serverConfig
test
test: 添加用例重试
test: 优化测试用例, 处理依赖按需安装未完成导致的用例失败
refactor: 重构测试用例中的 pkgPath 函数
refactor: 重构测试脚本, 每个用例运行单独的命令行实例chore: 添加 windows 一键安装脚本
refactor: 修正拼写错误的 oepnApiData 为 openApiData
# 2021 年 09 月
# v1.1.25-alpha.17
- test
- refactor: 去除 with 语法
- refactor: 重构测试脚本, 使其更易读
- server
- feat: 更新启动时的输出信息
- feat: 更新崩溃信息检测方式, 增加崩溃重启概率
- fix: 避免初始化模板时 package.json 没有要处理的 key 时出现错误
- feat: 支持引用声明文件来实现自动提示功能
- feat: 更新了模板文件以支持自动提示
- client
- feat: 在 api 列表页支持调试接口
# 2021 年 08 月
# v1.1.25-alpha.16
- feat: 支持命令行参数
--template
生成常用 mockm 配置 - feat: 支持命令行参数
--cwd
设置程序的工作目录 - feat: 更新初始化 httpData 时的 gitignore 文件
之前是先忽略所有文件再取反, 这可能导致用户在 httpData 目录下创建必要的新文件时, 由于没有手动修改 gitignore 而导致文件未进行版本控制 - feat: 把命令行参数
config
替换为--config
- fix: 初始化 get-port 后很久才出来远程服务, 这看起来像卡住了
- fix: 尝试处理 proxy 的 res 覆盖 headers 导致跨域失败
- feat: config.proxy 快速修改 json response 支持使用函数来自定义逻辑
# v1.1.25-alpha.15
- fix: ngrok 强制要求未注册用户使用最新版本
- feat: 程序的 SIGINT 事件不应显示日志, 容易造成误解
- feat: 当加载远程 url 时, 不应总是输出 err log, 避免认为程序错误
- feat: 去除动态安装时的弹窗
弹窗原来是为了可以看到安装进度, 但容易造成打扰 - feat: 当 openApi 获取失败时, 尝试从历史记录中获取
- feat: 启动服务时立即发起一次 openApi 备份
- feat(client): 优化 UI 界面上的 swagger 接口请求
就算开启远程模式, 但访问的是链接地址是内网时, swagger try 的请求地址仍使用内网 url, 以增加访问速度
# 2021 年 07 月
# v1.1.25-alpha.14
- feat: 给包裹 api 的返回值的函数设置 code 默认值
- feat: 支持使用记录的响应数据来创建接口
# v1.1.25-alpha.13
- fix: 修复 config.db 功能失效的问题
- fix: 处理 config.api path 参数失效, 不能获取 req.params 的问题
- fix: 避免 logo.txt 中版本标记所在的行字符数小于版本号字符数时出错
- feat: 在错误日志中添加运行环境
- feat: 请求记录支持匹配多个服务的 openApi
- fix: 修复某些设备修改不会自动重载服务
一些功能失效的问题都是由于 v1.1.25-alpha.12
版本导致的, 为了避免再出现类似的问题, 后面会花一些时间添加自动化测试功能, 确保发布前验证功能正常.
# 2021 年 06 月
# v1.1.25-alpha.12
- feat: ws url 支持 path 参数
- fix: 解决
ws /echo
和get /echo/.websocket
不能同时存在的限制- 此限制是 express-ws 所导致的
- feat: openApi 支持 basic-auth 认证
- feat: 通过 .gitignore 忽略一些文件, 避免产生不必要的关注
# v1.1.25-alpha.10
- fix: config.proxy 无法代理到其他域
- fix: proxy 值为 localhost 域时报错
- fix: 避免修改不支持的 json 类型导致报错
# 2021 年 05 月
# v1.1.25-alpha.9
- feat: 格式化 openApi 后再保存, 避免压缩的内容不易比较变更
- feat: 提高 openApi 备份文件名的可读性
- feat: 更新版本比较规则为比较大小, 而不是比较是否相同
- feat: 支持配置静态文件访问, 请参考 config.static
# v1.1.25-alpha.7
- feat: 添加 node 版本校验
- fix: 转换错误: req.getHeaders is not a function
这是由于 node 在 v15.1 之后把 headers 相关的方法放到了 prototype 中, 造成了 mockm 参数传送错误导致.
参考:
# 2021 年 04 月
# v1.1.25-alpha.6
- feat: 添加 config.backOpenApi, 用于定时备份 openApi
# 2021 年 03 月
# v1.1.25-alpha.5
不兼容的更新, 此版本 node-fetch
库更改为按需安装, 参考 util.run.fetch.
- feat: 生成 restc 请求链接时自动填充 path 参数
- feat: 支持查看入参示例
- feat: 不默认安装依赖 node-fetch
# v1.1.25-alpha.4
- feat: 支持从 web 页面上创建 WebSocket 接口
- feat: 按需安装依赖成功时显示反馈, 错误时可重试
# 2021 年 02 月
# v1.1.25-alpha.3
- fix: 修正 cnpm 检测问题
- feat: 支持意外退出时自动重启, 配置项 config.guard
# v1.1.25-alpha.2
- fix: 使用默认配置文件时, webApi 修改后不会自动更新
- feat: 扩展 config.api 支持的基本数据类型
- feat: config.api 支持 WebSocket
- feat: 支持 WebSocket 代理
- feat: 简化 remote 开启时的错误日志
# v1.1.25-alpha.1
- feat: 在默认 restc 页添加 query header body 参数
- fix: 尝试修复偶然性错误
Cannot set headers after they are sent to the client
# v1.1.24
- feat: 支持从 webApi 编写界面上使用示例请求参数进行调试, 功能位置:
action => try
- feat: 放宽对字段名必填的校验, 以更好的支持快速编辑字段描述
- fix: 避免未联网时获取系统 IP 错误
- fix: 避免测试页面缓存导致升级后异常
- fix: 避免 webApi 未录入任何信息的空行加入数据生成, 导致的
{undefined: ''}
现象 - fix: 隐藏未完善功能的菜单
- fix: 避免在检查新版本出错时提示
已发布新版本 undefined...
# 2021 年 01 月
# v1.1.24-alpha.4
不兼容的更新, 此版本 @image
默认会添加 .jpg 后缀.
- feat: 更新 mockjs, 切换图片占位服务, 避免 https 证书错误
# v1.1.24-alpha.3
- refactor(server): 拆分代码
# v1.1.23
- feat: 优化检测版本更新的速度
- fix: 翻译程序出错后备用翻译程序需正常工作
# v1.1.22
- fix: 修复 config.clearHistory.num 传入负数出错的问题
- fix: 修复使用添加 query 参数的 api 导致的不能找到历史记录的问题
- feat: 优化客户端接口提示
# v1.1.21
- feat: 支持 config.clearHistory 参数, 清除冗余记录
# 2020 年 12 月
# v1.1.20
- doc: 更新文档和版本号, 清理文件
- feat: 请求记录列表添加 loading
- fix: res.send(undefined) 时报错
- feat: 向 config 暴露所有 util
- fix: weApi 接口删除后不应该需要刷新才能看到已删除
- fix: 修复不能创建 webApi 的问题
- 由于上个版本添加了 url 截取, 但漏写了 url 为空时的情况导致
# v1.1.19
- feat: 优化翻译结果, 避免翻译为句子的形式
# v1.1.18
- fix: 从请求详情中点击编辑 webApi 时, 不应该携带 query 参数
# v1.1.17
- fix: 使用 spawn 方法的 env 参数时合并 process.env, 避免在某些系统出现问题
- feat: 支持 MOCKM_REGISTRY 或 NPM_CONFIG_REGISTRY 环境变量指定按需安装依赖时的镜像地址
# v1.1.16
# v1.1.15
- feat: 支持从文本转换
- 在 webApi 界面双击 table 中的加号使用
# v1.1.14
- feat: 从请求详情页可以启用或禁用该接口的 webApi
- feat: 优化请求详情页中的 swagger 按钮加载状态
# v1.1.13
- feat: 支持从界面上对 webApi 进行启用和禁用
# v1.1.12
- feat: 按需安装 cnpm
- chore: 更新依赖版本
# v1.1.11
- feat: 当 cnpm 没有安装时, 进行安装
- feat: 优化信息输出
# v1.1.10
- feat: 优化启用外网映射时下载 ngrok 的速度
- feat: 支持 MOCKM_REGISTRY 环境变量指定按需安装依赖时的镜像地址
# v1.1.9
- fix: 添加 example.config.js 文件中遗漏的变量声明
# v1.1.8
- feat: 向下支持到 node v10.12.0
- refactor: 避免使用保留字 package
# v1.1.7
- fix: 修复当配置文件中的 config.proxy 为 string 时解构导致错误
- chore: 优化信息输出代码, 添加启动 logo
# v1.1.6
- feat: 取消命令行参数 v, 修改为总是显示版本号
# v1.1.5
- feat: 支持在配置文件中声明 watch 参数
# v1.1.4
- feat: 支持检查新版本
- 使用命令行参数
--no-update
禁用更新检查
- 使用命令行参数
# v1.1.3
- doc: 在文档上显示 github 地址, 添加更新日志
- doc: 更新项目 readme
- doc: 更改中文名称为英文
- chore: 更新 server 中的 readme 及 package.json
- doc: 更新文档, 添加
快速开始
和以编程方式自定义接口响应
- doc: 修正文档错误
- feat: 添加 webApi 的 自定义内容 和 请求 ID 必填验证
# v1.1.2
- feat: 恢复 webApi 中 headers 的自定义功能
# 2020 年 11 月
# v1.1.1
- feat: 优化控制台请求日志输出, 使用 testApi 替代 path
- feat: 避免总是产生新的请求
- feat: 支持示例值使用 js 代码, 并暴露 Mock 工具库
- fix: 应用响应时, 原 api 的描述信息不应该被清空
- fix: 页面上创建的 webApi 接口包含点符号时, 无法使用, 因为点符号会被处理为键的层级
- feat: 支持从 web 界面删除 webApi 接口
- feat: 在请求详情页面添加
应用响应
, 快速应用到 apiWeb 的自定义返回值 - chore(doc): 移动相关依赖到 doc 中
# v1.1.0
- feat: 不兼容的更新, 更改 config 为函数时收到的对象
- 原 util 改为 util.libObj
- 删除 curlconverter 和 multiparty 这两个 mockm 中没有直接用到的库, 可以使用 util.toolObj.generate.initPackge 动态加载他们
# v1.0.29
- fix: 需要每次根据 osIp 更新调试地址
- 上次修改导致的问题, 不应该仅使用 osIp 作为初始化
# v1.0.28
- refactor: 把按需加载的 require 放置到 initPackge 中
# v1.0.27
- chore: 使用删除不必要依赖的 better-mock
- chore: 发布时忽略 httpData
# v1.0.26
- fix: 修正大小写
- 避免在大小写敏感的系统上出现问题
# v1.0.25
- feat: 优化 config.replayProxyFind, 只读取 json 格式
- fix: 代理整个网站时, 网站中的一些链接无法正常工作
- fix: 避免 end 事件不触发而没有记录信息
- 例如当运行命令
http :9000/image/jpeg
时, 在命令行并不会读取图片内容, 这导致 end 事件不会触发
- 例如当运行命令
- fix: 首次使用程序时第一个请求 id 为空
- doc: 优化文档中代码引用
vuepress dev doc
改为cd doc && npm start
是因为打包文档时 @doc 会根据当前执行目录进行转换而导致插件引用目录路径出错.
即更改vuepress build doc
为cd doc && vuepress build .
- doc: 完善文档, 添加综合示例
- doc: 更新 v1.0.24 文档
- feat: 删除不必要的功能
- 由于有了导航菜单可用, 可以删除详情页的 apiList 按钮
# v1.0.24
- feat: 优化 webApi 数据类型, 支持自定义接口逻辑
- feat: 由于 mockjs 的 extend 不支持深层, 所以取消使用此方案
- refactor: 减少页面渲染
- fix: 避免出现循环引用警告
- 发生在 node v14 上 config 文件路径相同, 并访问了不存在的属性时
# 2020 年 10 月
# v1.0.23
- feat: mock 模板支持转换数据类型
# v1.0.22
- fix: config.proxy 直接转发 url 无效
期望: 请求 /status/200 时返回 403 状态码 - refactor: 添加遍历需要的 key
- feat: 添加使用模板生成数据的按钮
# v1.0.21
- feat: 命令行参数 proxy 可与配置文件进行合并
- fix: 避免 server 端不会检索 index.html
- feat: 删除不必要的 restc 功能
- feat: 在菜单中添加 restc
- feat(restc): 支持同时使用 URL 和 query string
- feat(restc): 支持从 url 传入 uri 参数
- feat: 添加 restc
- reset v0.4.2
- SHA-1: a26bf3dc849f4c19bc2e28c83317a94a64e122bf
- feat: 添加面包屑导航菜单
- feat: 构造 mockjs 模板时进行类型和值分析
- fix: 修复一些边缘情况错误, 以及初始值, 回显问题
- refactor: 删除 server 中的 listToData 方法, 处理一些默认值
- 因为数据已经从前端生成
- feat: 点击取消关闭弹窗
- fix: 处理一些边缘情况
- feat: 取消自定义模版功能
- 为避免功能冲突, 目前先取消
- 当前仅允许使用
模版
或值
默认响应
- feat: 支持自定义模板
- feat: 支持使用模板或值作为响应
- feat: 修改 apiWeb 数据结构
- feat: 支持响应数据的模板修改
- feat: 使用 config.apiWebWrap 处理从页面创建的数据
# v1.0.20
- fix: 修复 dataDir 的相对路径处理
- fix: 处理命令行参数 config 为 true 时的, 将其作为路径使用带来的错误
# v1.0.19
- feat: 将 apiWeb 中的接口响应示例转换为接口
- 与 config.api 合并, 但 config.api 具有优先权
- feat: 不进行 url 转码以便于识别
- refactor: 优化 EditTable 组件渲染逻辑
- feat: 当用户切换 method 时, 刷新浏览器 url
- feat: 为 tabs 添加空数据标识, 没有数据的 tab 为灰色
- refactor: 拆分 ApiStudio 的组件结构
- feat: 添加 webApi 列表
- feat: 让 webApi 路径可配置
- 更改 apiStudio.json 为 apiWeb.json
# v1.0.18
- fix: request 依赖未声明导致启动出错
- 注: request 作者已经停止维护
- feat: 使用命令行参数 v 查看版本号
- feat: 生产环境关闭 sourceMap, 包括 css sourceMap
# v1.0.17
- feat: 命令行传入 config 但无路径时, 生成并使用示例配置
- feat: 添加字段重复以及接口路径格式校验
- feat: 支持使用快捷键 ctrl+s 保存输入内容
- feat: apiStudio 样式优化
- feat: 根据 query 参数请求数据
- refactor: 减少数据更新频率以优化性能
- 更改 value 为 defaultValue
- 更改文本输入类型的 onChange 为 onBlur
- feat: 保存界面上录入的 api 数据到 server 中
- feat: 完成接口数据录入的页面
- feat: 初步完成接口数据录入
- feat(client): 添加 api 创建界面
- feat: 添加缓存功能
# 2020 年 09 月
# v1.0.16
- feat: 添加 server 调试用的入口
- feat(server): 优化 console 日志输出时间格式
- feat(server): 增强请求日志的 log 的直观性, 例如根据响应状态码不同颜色不同
# v1.0.15
- fix(doc): 修正图片引用
- 在 vuepress 中如何使用另名引用 .vuepress/public 目录中的资源?
/image/
=>~@doc/image/
错误
# v1.0.14
- feat: 添加 config.disable 配置, 表示是否禁用所有自定义 api, 默认否
# v1.0.13
- feat: config.openApi 支持对象
- 以
new RegExp(key, 'i').test(pathname)
的形式匹配
- 以
# v1.0.12
- fix: 生产环境关闭 sourceMap, 以减少发布包的体积
- fix: 添加错误处理, 避免未处理的错误导致程序退出
- refactor(client): 从 ApiDetail 中抽出各个功能模块
- refactor: 抽离 ApiDetail.jsx
- feat: config.openApi 支持数组
- 数组时, 返回 pathname 匹配度最高的项
- fix(client): 接口历史记录列表样式优化
# v1.0.11
fix: 修正错别字 prot 为 port
chore: 更改程序名称 mock-mock 为 mockm
- 这是由于原名称在 npm 注册表中有太多相似
feat: config.dbJsonPath 默认为 config.dataDir 下的 db.json
fix: 当命令行参数与文件配置冲突时, 应当命令行参数优先
refactor: 更改变量名 userConfig 为 fileArgFn
feat: 在 config.api 中支持
* /all/method
写法, 表现与/all/method
一致*
号表示所有方法, 不写也是表示所有- 不写也表示所有, 是为了表现与 node-proxy 这个库一致
feat: 如果 config.proxy 与 config.api 存在相同的路由时, proxy.api 优先
fix(client): 期望避免点击 history 中的内容时出现列表闪烁现象
doc
- doc: 更新
待完成
和参考
- doc: 添加图片
- chore: 更新 icon
- doc(server): 更新 readme
- doc: 更新 readme
- doc: 修正错别字
- fix(doc): 修正文档发布命令, 期望可替换远程内容
- doc: 添加文档 favicon.ico
- chore: 添加文档发布脚本
- doc: 添加统计功能
- doc: 添加全文搜索功能
- doc: 更新文档内部链接
- doc: 优化文档样式, 避免 copy 图标占据代码块的空间
- fix: 更换代码块复制插件, 以避免行高亮被影响的问题
- doc: 添加选项描述 config.hostMode
- doc: 添加特性描述
- doc: 补充文档的选项描述
- doc: 更新文档 config.dbJsonPath 的默认值描述
- doc: 补充文档
- feat: 优化显示效果
- doc: 添加 todo list 插件
- doc: 初始化文档
- doc: 更新
# v1.0.10
- feat: 在单个接口上添加 req res 大小, 方便查找接口
- feat: 把请求的文件记录放在 request 目录中
# v1.0.9
feat: 删除(私有)用户可能不常用的配置 config.httpHistory 和 config.store
- feat: 修改配置名称 config.dbJsonName 为 config.dbJsonPath
- feat: 修改 config.dbJsonPath 默认值为 config.dataDir 目录中
# v1.0.8
- feat: 通过修改 host 文件来实现代码
0侵入
# v1.0.7
- refactor: 从 curl 命令中解析 request 库的 options 参数
# v1.0.6
- fix: 添加端口是否被占用的检测, 避免它看起来正常运行了实际却没有
- refactor: 就近声明依赖
- refactor: 避免 lodash 冗余的依赖
- feat: 增加程序启动容错性
- refactor: 优化 fileStore 方法, 可传入初始化数据
- fix: 自定义了一个 api, 在 api 内请求自身的接口, 返回到客户端的 testUrl 中的 id 不正确
- fix: 有时候 url 上的 query 参数没有被正确读取到 line.query 中
这是由于 router.render 方法中, req.query 会被删除. 而 setHttpHistoryWrap 是在 res.send 后执行, 也就是在 router.render 删除 req..query 后执行的, 所以导致没有正确获取 req.query - fix: 修复 note.remote 相关的两个问题
- 读取
note.remote.testProt
异常 - res.header 中有时候不存在 note.remote, 这是由于自动刷新时 note.remote 被误删导致
- 读取
# v1.0.5
- feat: 在请求的 req.header 中也加入远程调试链接
- 修改 config.testIp 为 config.osIp
- fix: 避免拦截到的 req.url 都是 /
- 这是由于 server.use 的第一个参数是写死的
*
导致到
- 这是由于 server.use 的第一个参数是写死的
- fix: 补充 server 中所需依赖
- refactor: 由于目前 id 可能会生成重复, 先使用 index 吧~
- refactor: 全局处理 Promise 没有添加 then 的错误
- feat: 一点点体验优化
- feat: 使用普通 http 请求以及服务器分页来获取请求列表
- fix: 修复 mac 平台由 configPath 拼接导致的 ngrok 无法启动
- catch 方法中需要调用 resolve 才能进入下一次条件检测
- chore: 更新启动和调试命令
- fix: 远程服务无法启动
- feat: 完善 client 公网模式支持
- feat: 支持所有端口映射到公网
- 使用命令及配置的方式来避免单个会话限制
# v1.0.4
- feat: 支持映射本地服务到公网, 通过
config.remote
配置,修改后需重启生效
- refactor: 使用在线 cdn 资源
# 2020 年 08 月
# v1.0.3
fix: config.proxy 不应报错
const rootTarget = config.proxy.find(item => (item.context === `/`)).options.target ^ TypeError: Cannot read property 'options' of undefined
chore: 添加新的 npm 命令
feat: 即使 dbCover 为 false, 也应该同步那些新添加的 key.
fix: 在 db 中新创建 key, 应该要产生新的 api, 但是没有
feat: 支持 config.route 路由映射
参考refactor: 优化代码
feat: 支持自定义统一的 res 数据结构
- config.resHandleReplay
- 处理重放请求出错时会进入这个方法
- 对于没有记录 res 的请求, 返回 404 可能会导致前端页面频繁提示错误(如果有做这个功能)
- 所以这里直接告诉前面接口正常(200ok), 并返回前约定的接口数据结构, 让前端页面可以尽量正常运行
- config.resHandleJsonApi
- 由 db.json 生成的接口的最后一个拦截器
- 可以用来构建项目所需的数据结构
- config.resHandleReplay
fix: api 中的动词省略错误
- fix:
get /name
不应导致post /name
不能转发到服务器 - feat: 支持省略动词时表示所有动词
- fix: 需完善 config.api 中的
*
和/
的支持, 表示在所有自定义 api 之前添加的中间件
- fix:
feat: 在
config.proxy
的选项中添加数组类型, 用来快速处理 res.body
用于快速处理 json 格式的 response, 使用数组语法:[A, B]
.
数组中不同个数和类型有不同的处理方式.feat: api 可简写为直接以 json 对象作为返回值
# v1.0.2
- chore: 更新程序名称 mock-server 为 mock-mock
- 可执行文件更改为
mm
- 配置文件更改为
mm.config.js
- 可执行文件更改为
- feat: 支持命令行 watch 参数, 指目标修改时重启程序
- 例如命令:
$0 watch=data
,当修改 data 目录中的文件时, 会自动进行重启 - 应用于当 config 中引入其他资源时
- 例如命令:
- feat: 简化命令行参数 == 为 =, 支持参数值中带有 =
- 运行结果:
{a: 1, b: 'c=d'}
- 前
$0 a==1 b==c=d
- 后
$0 a=1 b=c=d
- 运行结果:
- build: 从 package.json 中读取 name 和 version 作为发布文件名
# v1.0.1
- feat: 添加
config.proxy[].target
的默认值 - chore: 补充依赖
- feat: 添加修改 response 中 json 的方法
- feat: 使用 dev 参数来决定是否使用 logHelper
- 开发环境指定这个参数, 可以显示 log 行数
- 生产环境不指定这个参数, 则不显示
- refactor: 把当前系统 IP 先收集在 config 中, 以方便使用, 避免重新调用函数
# v1.0.1-alpha.4
- fix: 重放时更新 api 测试地址,
x-test-api
- fix: 应先删除 server/page 再进行复制, 避免更新失败
- feat: 打包输出文件为
.tgz
, 方便通过文件安装- 安装方式例如:
npm i http://example.com/package.tgz
.tgz
是 tar 和 gzip 的意思, tar 表示存档, gzip 才表示压缩- gzip 功能通过
tar.c({gzip: true})
开启
- 安装方式例如:
- feat: 修改输出的目录 server 为 package
- 这是为了方便发布, 参考
package-lock.json
中依赖的压缩包内目录为package/
- 这是为了方便发布, 参考
# v1.0.1-alpha.3
- fix: 不应使用错误的客户端输出目录, 从而导致测试页面不能正确查找和访问
- feat: 添加发布功能
- 在
release/
中运行npx gulp
为生成dist/
- 在根目录运行
npm run bt
生成后安装依赖然并运行 - 能使用 ms.config.js 中的配置运行
- 在
- refactor: 修改客户端编译结果的输出位置为 server 中
为了方便发布. 因为发布后的文件为单个目录, 所以应该都包含在 server 中, 发布 server 目录即可 - fix: 应该添加变量声明, 避免打包后出错
- feat: 使用相对路径的 bodyPath, 让 httpData 可移植
- fix: 避免重放时没有记录时报错
- feat: 重放接口的判断条件支持自定义
一些开发者不是使用 http 标准的状态码作为接口的成功与否判断条件, 而是在返回值中自定义字段和值作为依据. - feat: 支持 function 或 object 类型的配置
- 作为 function 时可以从参数接收工具库, 参考
server/config.js:44
- 作为 function 时可以从参数接收工具库, 参考
- refactor: 用到 config 才传 config
- chore: 修正 server.js 调试参数
# v1.0.1-alpha.2
- fix: 不应错误的传送 host,
- 自定义代理时应使用 proxyConfig.target 中的 host
- 参考多 host 负载均衡 (opens new window)
- feat: 支持在自定义代理前添加 express 中间件
参考: - fix: 应该正确拦截 proxy 中指定路由
- 给
server.use()
传入要拦截的路由即可
- 给
- feat: 向自定义代理添加的
记录请求历史
, 注入cors
等功能 - feat: proxy 配置支持自定义代理
- 此功能可以自定义拦截过程, 类似 webpack 中的
devServer.proxy
. - proxy 中键的值可以是
string | object
, string 的时候相当于请求转发. object 相当于传入 proxy 的配置. - proxy 配置参考 (opens new window)
- 此功能可以自定义拦截过程, 类似 webpack 中的
- refactor: 删除 page 目录中的文件
- page 目录中的文件已通过 webpack 方式重新编写到 client 目录中
- chore: http-proxy-middleware 依赖版本更新
- feat: 重放时抽取 code 为 200 的记录
- feat: 添加跨域功能在 run.curl 和 run.fetch 里面
# v1.0.1-alpha.1
- feat: 添加跨域功能在 run.curl 和 run.fetch 里面
- fix: 使用 run.fetch 方法时, 如果原接口是 gzip 数据时, 不应该导致返回的数据解析失败
由于返回的内容其实已经被解码过了, 所以不能再告诉客户端 content-encoding 是压缩的gzip
, 否则会导致客户端无法解压缩 - 例如导致浏览器无法解码: net::ERR_CONTENT_DECODING_FAILED 200 (OK)
- fix: 使用 run.fetch 方法时, 如果原接口是 gzip 数据时, 不应该导致返回的数据解析失败
- refactor: 清除 package.json 中未使用的依赖
- feat: 使用 gzip 压缩 serverTest 中的前端页面
- refactor: 设置 baseURL 配置为 window.location.origin
- refactor: 优化环境变量配置
- refactor: 借助 eslint 处理代码格式
- chore: 添加 build 后的依赖图查看工具
- fix: 不使具名正则表达, 因为无法转换为兼容性代码
- chore: 添加环境变量工具库 cross-env
- feat: 可运行从浏览器中直接复制的
cURL(bash)
命令和fetch(node.js)
代码- 相当于同时复制了原接口的参数以及返回值
- feat: 转换 page 目录中的内容为 client 中
- 把直接在浏览器中运行的 page 放到由 webpack 编译的 client 目录中
# v1.0.0
- fix: 补充 client 中未提交的 public 目录
- fix: 避免控制台出现错误警告
Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Wave which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node (opens new window)
- feat: 在 client 中使用 antd
- feat: 在 client 中使用 scss
- feat: 初始化 client,
npx create-react-app client
- 准备重构 page 到 client 中, 更换 umd 方式为 webpack 方式
- refactor: 更新 server 中 page 目录的使用
- refactor: 移动 server 相关的文件到同一个目录中
- refactor: 配置全局 baseURL
- fix: 避免 config 是全路径时, 匹配失效
# 2020 年 07 月
# v0.15.0
- feat: 更新 http log 格式
- feat: 更新日志格式
- feat: 默认以当前命令运行目录下的 ms.config.js 文件作为配置
- 当没有此文件时, 使用默认配置
- feat: 使用服务器获取远程 openApi , 避免跨域
- refactor: 把 log.js 和 util.js 放入 util/ 目录中
- refactor: 删除无必要文件
- refactor: 重构 util 文件, 继续归纳同类方法
- feat: 添加分页器
- feat: 添加和重构跨域功能、选项
- refactor: 重构代码, 把相关性较高的函数集中在对象中
# v0.14.0
- fix: 不应该使用不存在的 util 对象
- fix: 应避免 history 中 data 为空时报错
- fix: 自定义 api 也在 header 中添加 testApi 地址
- fix: 应该更新 headers 中的 x-test-api 地址
- 添加完整的 apiId
- chore: 提交
httpbin.org/spec.json
, 避免线上更新导致不符合期望~ - fix: 当没有传 apiId 时, 应该高亮最新 api
- feat: 当不传 apiId 的时候, 则返回最新一条 api
- 有 apiId 时返回指定 api
- 无 apiId 时返回最新 api
- fix: 当没有传 apiId 时不应该获取到不相关的记录
- feat: 取消请求重发并发限制
- 不再需要等待上次请求完成才能进行第二次重发
- 即支持模拟同一时间发送多次请求
- fix: 同目录多个实例时, 不应该每个请求都是一样的 apiId
- refactor: 删除不必要的 log
- feat: 生成更短的请求 id
- chore: 在 packge.json 中添加 morgan
- fix: 修正 print 方法
- feat: 统一与日志输入功能
- 与 json-server 使用一致的请求日志风格
- fix: 避免错误的获取 req.body
http :9000 title="js"
获取到的 req.body 不应该包含 id
- fix: 不应该总是获取到第一个 bodyFile
- feat: 根据有无 swagger api 展示按钮
- feat: 替换 swagger 的请求地址以及当前请求的 token
- refactor: 优化初始化 config.httpHistory 的方法
- chore: 升级 json-server
# v0.13.0
- fix:
req.params
只能获取 path 中的参数会导致错误
使用path-to-regexp@0.1.7
来解析 regexp 及 req.url 得到完整的参数 - feat: 以解码方式显示 url 及 query 参数
- fix: 重发某条历史请求
- chore: 提交 vscode 调试配置
- feat: 从界面上查看某个请求的历史记录
- feat: 记录单个 url 的每次请求历史
- 修改文件的存储方式, 以 path 生成目录
- 修改请求的 id 标志
# v0.12.0
- refactor: 调整函数引用顺序, 添加一些注释
- feat: 支持在配置中编写可供 json-server 使用的 db 数据
- refactor: 抽出 util 方法
- fix: 支持 json-server 生成的 api
例如:http :9000/books?_limit=1
- feat: 支持以文件方式传入配置, 修改配置自动重启
- 把拦截器 api 放在配置中
- feat: 向本地服务提供跨域能力
- refactor: 无需 config.js 中的 noProxy 配置, 存在拦截方法则进行拦截.
更新 api.js 中的拦截器书写方式, 支持使用 path-to-regexp (opens new window) 的方式配置拦截的 path.
# 2020 年 06 月
# v0.11.0
- fix: 避免 JSON.parse(undefined) 报错
- fix: 截图预览区域样式优化
- feat: 支持 swager path 参数对应 api
eg: /status/403 => /status/{codes} - refactor: 重构代码获取 ReqResState 的函数
- fix: 修正命令行名字 sm 为 ms
- refactor: 更新命令行参数解析方法
- feat: 支持从命令行传入简单参数调用
由于 url 可能包含等号(=) , 所以使用两个等号作为参数标识, 以免参数解析错误
# v0.10.0
- build: 修改 packge.json 中的入口文件为 server.js
- feat: 支持根据 openApi 自动匹配对应的 swagger api 接口
- refactor: 重构调试服务中的 action 相关方法.
- fix: 解决原来进入 getApiListSse 的条件 res.write 后再进入后面的 res.json 导致 sse 连接中断.
即 getApiListSse 条件中没有 return, 导致进入后续条件. - fix: 由于 root 被定义为浏览器高导致的截图不完整
- refactor: 使用拦截器优化 http 请求返回值
- fix: 处理重发请求时, 没有返回 err.response 的错误提示
- fix: 添加重放 api 的跨域功能
- feat: 可以在当前页面打开 swagger-ui 中的当前 api
# 2020 年 05 月
# v0.9.0
- fix: 处理当目标服务器没有返回 response 时的情况
- fix: 增加重放功能跨域
- feat: 增强 mock api 配置 noProxy, 支持正则多路由
- feat: 使用 sse 实时获取新采集的接口
# v0.8.0
- fix: 修正 url 匹配
- fix: 修复时间排序
- feat: 支持在 res headers 中添加调试页面的地址
- feat: 简化配置
- feat: 只要滚动就显示回到顶部
- feat: 把 apilist 中的时间改为相对时间
- feat: 支持保存 mockapi 的请求记录
# v0.7.0
- fix: 他人不能访问 localhost
- feat: 使用按钮方式生成截图在页面上, 由用户自行复制.
原型使用的 api navigator.clipboard 仅在 https 或 localhost/127.0.0.1 下可用. - feat: 修改 api 默认排序为时间
# 2020 年 04 月
# v0.6.0
- feat: 添加请求重发的功能; 以及点击回到请求列表的功能
- perf: 调整 api 摘要信息的样式
- feat: api 列表页
apiList
, 使用 antd 表格控件, 支持排序 - perf: 进入 reqRes 页即使用已有的 lineHeaders 渲染
- feat: 获取 bodyFile 时还原 headers, 并允许跨域
# v0.5.0
- fix: 更新为最新数据结构的重放功能
- feat: 使用
react-router-dom
, 在切换 hash 时更新 state - feat: 修改 ReqRes 默认值为全部展开
- feat: 添加列表页, ApiList
- feat: 使用 ctrl+c 复制页面内容为图片
- feat: 复制页面为图片到剪贴板
- feat: 使用
react-json-view
来渲染 json, 及 json 的展示折叠功能 - feat: ReqRes 面板
- feat: 重新指定 server.js 的数据返回格式, 以及可以保存 req 为文件
- feat: 预览 Response Body, 例如 image, json
- feat: headers source 模式(即 parse 模式不排序对象键)
# v0.4.0
- fix: 避免获取默认值 null,
JSON.parse(null)
- fix: 避免要复制的文本为空时也显示为复制成功
- feat: 从 xhr 请求中获取 httpData
- feat: 添加复制功能;
- feat: 添加图标;
- feat: 完成功能: parse encode source json copy
- feat: 使用非打包方式创建前端页面
- feat: 使用 replace 以及引用更新后缀名
- fix: 应当 res 的 content-type 更新后, 也更新对应的存储的文件后缀名
# 2020 年 03 月
# v0.3.0
feat: 支持存储响应体为文件, 以及在请求查看页打开此文件
feat: 增加一个服务, 更方便的获取 api 调试地址
- 原请求:
http://localhost:9004/api/task/?id=1
- 增加前:
http://localhost:9004/api/t/test/get/api/task/?id=1
- 增加后:
http://localhost:9005/get/api/task/?id=1
- 原请求:
feat: 修改接口调试入口的传参方式, 让其更容易识别和使用.
- 修改前:
http://localhost:9004/api/t/test?api=GET%20%2Fapi%2Ftask%2F%3Fpage%3D1%26pageSize%3D10
- 修改后:
http://localhost:9004/api/t/test/get/api/task/?page=1&pageSize=10
- 修改前, api 是作为 query 参数传入的, 需要进入转义, 但转义不易识别.
- 修改后, api 作为路由的一部分, 不被转义.
- 修改前:
# 2020 年 02 月
# v0.3.0-alpha.1
- feat: 根据已保存的请求记录进行重放
# 2020 年 01 月
# v0.2.0
- fix: 1. 处理 res 不存在的情况, 2. 配置本机 ip
- feat: 支持请求重播
- feat: 录制转发的请求与响应
- fix: -g/--globoff 关闭 URL 的通配符功能。这样就可以访问名称中含有字符 {、}、[、] 的文件了
- fix: 查看请求详情时, 如果转换为 json 失败则假设为 html
- feat: 持久化 token
# 2019 年 12 月
# v0.1.0
由于在工作中由于众所周知的原因, 再次深刻感受到了要改善前后端接口协作的必要性. 于是又重新实现起这样一个工具, 在 github 上创建项目时, 却意外发现在 2 年前自己就已经做了一个类似工具的雏形了. 于是决定把灵魂归还给这个雏形, 让它继续成长, 但这一次我们要做的不仅仅是接口模拟.
- feat: 提供一个 /t/test 接口, 利用 curl 重发请求, 用于给后端查看请求信息
- feat: 添加跨域功能
- feat: 请求转发, 不影响联调完成的接口
- feat: 常用中间件 upload/formData/body/query/params
- feat: 基于 express, 可使用正则快速创建 api
- feat: 基于 json-server/mockjs, 快速生成数据及 Restful API
# 2018 年 02 月
一个使用 express 配合 json 文件实现的接口模拟, 名为 mock-server .
# v0.0.1-alpha.1
- 初始化一个 cli 项目及注册全局命令
- commander 解析命令行参数
- 使用 express 实现一个简单的 http 服务
- 从浏览器指定要读取的 json
- 根据请求的 http 方法来决定如何返回 json
- 支持使用 post 中的 body 请求体来添加内容
← config.api 作为函数 实现 →