Mockoon模板引擎完全指南:生成动态响应内容
Mockoon作为一款开源的API模拟工具,其模板引擎(Templating Engine)功能允许用户创建动态响应内容,大幅提升了API模拟的灵活性和真实性。本文将系统介绍模板引擎的核心功能、使用方法及高级技巧,帮助开发者快速掌握动态响应生成技术。
模板引擎基础
模板引擎通过双花括号{{ }}语法解析响应内容中的动态表达式,支持从请求参数、头部、Body等多种来源提取数据,并结合内置工具函数生成动态值。核心实现位于packages/commons-server/src/libs/template-parser.ts,支持在响应Body、HTTP头部、文件路径等场景使用。
基本语法规则
- 表达式格式:
{{ helperName '参数1' '参数2' }} - 支持嵌套调用:
{{ json (body 'user.profile') }} - 字符串参数需用单引号包裹
- 无参数helper直接调用:
{{ now }}
快速上手示例
创建一个返回当前时间的动态响应:
{
"timestamp": "{{ now 'yyyy-MM-dd HH:mm:ss' }}",
"requestId": "{{ objectId }}"
}
执行后将生成包含当前时间戳和唯一ID的JSON响应,如:
{
"timestamp": "2025-11-02 10:30:45",
"requestId": "60d21b4667d0d8992e610c85"
}
核心Helper函数
Mockoon提供了丰富的内置Helper函数,覆盖数据提取、随机生成、格式转换等常见需求。完整函数列表可参考packages/commons-server/src/libs/templating-helpers/目录下的实现文件。
请求数据提取类
| Helper | 用途 | 示例 |
|---|---|---|
body | 提取请求Body数据 | {{ body 'user.name' 'Guest' }} |
queryParam | 获取URL查询参数 | {{ queryParam 'page' '1' }} |
urlParam | 获取URL路径参数 | {{ urlParam 'userId' }} |
header | 获取请求头信息 | {{ header 'Authorization' }} |
cookie | 获取Cookie值 | {{ cookie 'sessionId' }} |
实战示例:从POST请求Body中提取用户ID并返回个性化消息
{
"message": "Hello {{ body 'user.name' 'Guest' }}!",
"userId": "{{ body 'user.id' }}",
"requestedAt": "{{ now 'yyyy-MM-dd' }}"
}
数据生成与转换类
| Helper | 用途 | 示例 |
|---|---|---|
faker | 生成假数据 | {{ faker 'name.findName' }} |
random | 生成随机数 | {{ random 1 100 }} |
oneOf | 随机选择数组元素 | {{ oneOf '["A","B","C"]' }} |
objectId | 生成MongoDB风格ID | {{ objectId }} |
json | 转换为JSON字符串 | {{ json (body 'data') }} |
高级示例:生成包含随机用户信息的响应
{
"id": "{{ objectId }}",
"name": "{{ faker 'name.findName' }}",
"email": "{{ faker 'internet.email' }}",
"age": "{{ random 18 65 }}",
"status": "{{ oneOf '[\"active\",\"inactive\",\"pending\"]' }}"
}
高级应用场景
文件路径模板
支持在文件路径中使用模板表达式,动态加载不同内容文件。实现逻辑参见packages/commons-server/src/libs/server/server.ts。
配置示例:根据请求参数加载不同版本的响应文件
/mocks/{{ queryParam 'version' 'v1' }}/response.json
当请求/api/data?version=v2时,将加载/mocks/v2/response.json文件内容。
响应头模板
HTTP响应头同样支持模板语法,可动态设置缓存控制、认证令牌等。相关测试用例见packages/app/test/specs/templating.spec.ts。
配置示例:
X-Request-ID: {{ objectId }}
X-Timestamp: {{ now 'x' }}
Cache-Control: max-age={{ random 60 3600 }}
条件逻辑与循环
虽然Mockoon模板引擎不直接支持if/else语法,但可通过oneOf和响应规则组合实现条件逻辑。响应规则配置位于packages/app/src/renderer/app/components/route-response-rules/route-response-rules.component.ts。
条件响应示例:根据用户角色返回不同数据
{
"user": {{ body 'user' }},
"permissions": {{ oneOf '[["read"], ["read","write"]]' }}
}
测试与调试
内置测试用例
Mockoon提供了全面的模板引擎测试用例,覆盖各类Helper函数和边界情况:
- 基础语法测试:packages/app/test/specs/templating.spec.ts
- 响应规则测试:packages/commons-server/test/specs/response-rules/response-rules-interpreter.test.ts
常见错误处理
| 错误类型 | 原因 | 解决方案 |
|---|---|---|
| 解析错误 | 语法错误,如未闭合括号 | 检查表达式格式,确保括号匹配 |
| 空值返回 | 引用路径不存在 | 使用默认值:{{ body 'user.name' 'Guest' }} |
| 类型错误 | 数据类型不匹配 | 使用json helper转换:{{ json (body 'data') }} |
错误示例:
// 错误语法
{{ body 'user.name' }}
// 正确语法
{{ body 'user.name' 'Default Name' }}
性能优化与最佳实践
避免重复计算
对于复杂表达式,建议通过响应规则提前计算结果,相关实现参见packages/commons-server/src/libs/response-rules-interpreter.ts。
合理使用默认值
所有数据提取Helper都应提供默认值,避免响应中出现undefined:
// 推荐写法
{{ queryParam 'page' '1' }}
{{ header 'X-API-Key' 'unknown' }}
// 不推荐
{{ queryParam 'page' }}
文档与示例
- 官方文档:docs/official.md
- 模板示例:packages/app/test/data/mock-envs/templating.json
- 高级用法:README.md
通过掌握这些技巧,开发者可以充分利用Mockoon模板引擎创建高度模拟真实环境的API响应,加速前端开发和测试流程。建议结合官方示例和测试用例深入学习,探索更多高级应用场景。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



