Form.io MCP 服务器
一个模型上下文协议(MCP)服务器,使人工智能助手能够通过与Form.io的API交互,使用自然语言创建、读取、更新和管理表单。
特点/功能
- 列出表单浏览您Form.io项目中的所有表单
- 获取表单详情检索完整的表单模式和配置
- 创建表单根据自然语言描述生成新表单
- 更新表格修改现有表单及其组件
- 删除表单从您的项目中移除表单
- 组件构建器用于创建结构良好的Form.io组件的辅助工具
- 安全护栏MCP只能修改其创建的表单,从而保护现有表单免受意外更改
先决条件
- Node.js >= 18.0.0
- 一个Form.io账户和项目
- 表单.io API凭据(API密钥或JWT令牌)
安装
- 克隆或下载此存储库
- 安装依赖项:
npm install- 构建TypeScript代码:
npm run build配置
设置以下环境变量:
export FORMIO_PROJECT_URL="https://your-project.form.io"
export FORMIO_API_KEY="your-api-key"
# OR use JWT token instead:
# export FORMIO_TOKEN="your-jwt-token"获取Form.io凭证
- 登录您的Form.io账户,网址为:https://portal.form.io
- 导航到您的项目
- 前往设置 → API密钥以生成API密钥
- 或者,使用您的用户令牌进行JWT(JSON Web Token)认证
运输方式
此服务器支持两种传输模式:
- STDIO 传输(默认) - 对于Claude Desktop及类似的基于进程的客户端
- HTTP传输 - 对于基于HTTP的MCP客户端和远程访问
______________________________________________________________________
STDIO 传输(默认)
与Claude桌面版的使用
将此服务器添加到您的Claude Desktop配置文件中:
MacOS(麦金塔操作系统): ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
MacOS/Linux 示例:
{
"mcpServers": {
"formio": {
"command": "node",
"args": ["/absolute/path/to/formio-mcp/dist/index.js"],
"env": {
"FORMIO_PROJECT_URL": "https://your-project.form.io",
"FORMIO_API_KEY": "your-api-key-here"
}
}
}
}Windows 示例:
{
"mcpServers": {
"formio": {
"command": "node",
"args": ["C:\\path\\to\\formio-mcp\\dist\\index.js"],
"env": {
"FORMIO_PROJECT_URL": "https://your-project.form.io",
"FORMIO_API_KEY": "your-api-key-here"
}
}
}
}注: 将路径替换为你克隆此仓库的绝对路径。
更新配置后,重启Claude桌面版。
______________________________________________________________________
HTTP传输
为什么使用HTTP传输?
- 远程访问在网络可访问的机器上托管服务器
- 多客户端多个客户端可以连接到同一个服务器实例
- 网页集成与基于网络的MCP客户端更易集成
- 调试可以使用标准的HTTP工具(如curl、Postman)进行测试
设置
1. 生成API密钥
openssl rand -hex 322. 配置环境变量
创建一个 .env 文件或设置环境变量:
# Form.io Configuration
FORMIO_PROJECT_URL=https://your-project.form.io
FORMIO_API_KEY=your-formio-api-key
# MCP HTTP Server Configuration
MCP_HTTP_PORT=44844
MCP_HTTP_HOST=localhost
MCP_BASE_PATH=/mcp/v1
# Authentication
MCP_API_KEYS=your-generated-api-key-here
MCP_REQUIRE_AUTH=true
# CORS (optional - supports wildcards)
MCP_CORS_ORIGINS=http://localhost:*,https://yourdomain.com3. 启动服务器
npm run start:http你应该看到类似这样的输出:
[MCP] Starting in HTTP mode...
[MCP] HTTP configuration loaded: { port: 44844, host: 'localhost', ... }
[MCP] Form.io MCP Server (HTTP) listening on http://localhost:44844
[MCP] Endpoints:
- Health: http://localhost:44844/mcp/v1/health
- Info: http://localhost:44844/mcp/v1/info
- SSE: http://localhost:44844/mcp/v1/sse
- Messages: http://localhost:44844/mcp/v1/messages
[MCP] Server ready to accept connectionsHTTP客户端配置
注: 截至目前,Claude Desktop 仅支持 STDIO 传输方式。HTTP 传输方式旨在用于:
- 支持HTTP的MCP客户端(如Windsurf、Cline或自定义实现)
- 远程服务器部署
- 多用户/多客户端场景
- 基于Web的MCP客户端集成
通用HTTP客户端配置
对于支持通过SSE进行HTTP传输的MCP客户端:
{
"mcpServers": {
"formio": {
"url": "http://localhost:44844/mcp/v1",
"transport": "http+sse",
"headers": {
"Authorization": "Bearer your-generated-api-key-here"
}
}
}
}风帆冲浪配置示例
如果使用支持MCP的Windsurf或类似集成开发环境(IDE):
{
"mcpServers": {
"formio": {
"type": "http",
"url": "http://localhost:44844/mcp/v1",
"headers": {
"Authorization": "Bearer your-generated-api-key-here"
}
}
}
}对于Claude Desktop用户: 继续使用STDIO传输方式(见上文)。未来版本可能会添加对HTTP传输方式的支持。
HTTP API 接口端点
公共端点(无需认证)
GET(在中文中,通常直接使用英文原词,不进行翻译,若需意译,可理解为“获取”或“取得”,但具体含义需根据上下文确定) /mcp/v1/health - 健康检查
curl http://localhost:44844/mcp/v1/health回答:
{
"status": "ok",
"timestamp": "2025-10-09T12:00:00.000Z",
"server": "formio-mcp-server",
"transport": "http+sse",
"connections": 0
}GET /mcp/v1/info - 服务器信息
curl http://localhost:44844/mcp/v1/info受保护的终端点(需要身份验证)
GET(获取) /mcp/v1/sse - 建立SSE连接
curl -H "Authorization: Bearer your-api-key" \
-N http://localhost:44844/mcp/v1/sse这会建立一个长期连接以接收响应。服务器将发送:
- 初始
connected带有(或:与……一起的)活动connectionId - 每30秒发送一次心跳评论
- 您请求的响应事件
POST(邮寄) /mcp/v1/messages - 发送 JSON-RPC 请求
curl -X POST http://localhost:44844/mcp/v1/messages \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-H "X-Connection-ID: your-connection-id" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}'HTTP工作流程
- 建立SSE连接客户端连接到
/mcp/v1/sse并收到一个connectionId - 发送请求客户端发送JSON-RPC请求到
/mcp/v1/messages带着/与……一起X-Connection-ID头球 - 接收回复服务器通过SSE连接发送响应
- 保持连接(或保持活动)服务器发送心跳评论以保持连接
安全
- 认证所有受保护的终端点均需要
Authorization: Bearer头球 - CORS(跨源资源共享)支持通配符的可配置源
- 速率限制可配置的请求限制(默认:每分钟100个请求)
- 安全头部(或安全标头)头盔中间件添加标准安全头
- HTTPS在生产环境中使用反向代理(如nginx、Apache)来处理HTTPS
配置选项
所有HTTP设置都可以通过环境变量进行配置:
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_HTTP_PORT | 44844 | 监听端口 |
MCP_HTTP_HOST | localhost | 要绑定的主机 |
MCP_BASE_PATH | /mcp/v1 API终端节点的基础路径 | |
MCP_API_KEYS 逗号分隔的API密钥 | ||
MCP_REQUIRE_AUTH | true | 启用/禁用身份验证 |
MCP_CORS_ORIGINS | http://localhost:* | 允许的CORS来源 |
MCP_RATE_LIMIT_WINDOW_MS | 60000 | 速率限制窗口(毫秒) |
MCP_RATE_LIMIT_MAX | 100 | 每个窗口的最大请求数 |
MCP_SSE_HEARTBEAT_MS | 30000 | SSE 心跳间隔(毫秒) |
MCP_SSE_TIMEOUT_MS | 300000 | SSE 连接超时(毫秒) |
MCP_MAX_PREVIEW_CONNECTIONS | 100 | 最大并发预览连接数 |
MCP_PREVIEW_IDLE_TIMEOUT | 300000 | 预览连接空闲超时(毫秒) |
MCP_UPDATE_DEBOUNCE_INTERVAL | 500 | 更新通知防抖(毫秒) |
部署
本地开发
MCP_API_KEYS=test-key-123 npm run start:http使用 systemd 的生产环境
创造 /etc/systemd/system/formio-mcp.service:
[Unit]
Description=Form.io MCP Server
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/formio-mcp
ExecStart=/usr/bin/node /opt/formio-mcp/dist/index.js --http
Environment="FORMIO_PROJECT_URL=https://your-project.form.io"
Environment="FORMIO_API_KEY=your-formio-key"
Environment="MCP_API_KEYS=your-secure-key"
Environment="MCP_HTTP_HOST=0.0.0.0"
Environment="MCP_HTTP_PORT=44844"
Restart=always
[Install]
WantedBy=multi-user.target然后:
sudo systemctl enable formio-mcp
sudo systemctl start formio-mcp
sudo systemctl status formio-mcp使用 Docker
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist ./dist
EXPOSE 44844
CMD ["node", "dist/index.js", "--http"]构建并运行:
docker build -t formio-mcp .
docker run -p 44844:44844 \
-e FORMIO_PROJECT_URL=https://your-project.form.io \
-e FORMIO_API_KEY=your-key \
-e MCP_API_KEYS=your-mcp-key \
formio-mcp______________________________________________________________________
安全与护栏
为了保护您现有的Form.io表单免受意外修改,此MCP服务器实施了严格的权限控制:
MCP 创建的表单
当MCP创建表单时,它会自动:
- 在前面添加
[MCP]在表单标题中(例如,将“联系表单”修改为“\[MCP\] 联系表单”) - 在前面添加
mcp-到表单路径(例如,“contact”变为“mcp-contact”)
MCP能做什么
✅ 列出并阅读所有表格 - MCP可以查看项目中的任何表单,包括在MCP外部创建的表单 ✅ 创建新表单 - 所有创建的表单将自动添加前缀 ✅ 更新由MCP创建的表单 - 只有带有MCP前缀的表单可以修改 ✅ 删除MCP创建的表单 - 只有带有MCP前缀的表单才能被删除
MCP无法做到的事情
❌(表示错误或不正确的意思,无具体对应中文词汇,通常可理解为“错误”或根据上下文翻译为“不对”、“不正确”等) 修改非MCP表单 - 尝试更新没有MCP前缀的表单将被拒绝 ❌(这个符号在中文中通常表示“错误”或“不正确”的意思,但直接翻译时,由于其本身是一个图形符号,没有具体的中文对应词汇,所以保持原样或解释其含义即可。) 删除非MCP表单 - 尝试删除没有MCP前缀的表单将被拒绝
识别
如果满足以下任一条件,则该表单被视为“由MCP创建”:
- 标题以……开头
[MCP]或 - 这条路径以……开始
mcp-
如果您尝试更新或删除一个非MCP表单,您将收到一条明确的错误消息,说明此操作不被允许。
可用工具
list_forms
列出你的Form.io项目中的所有表单。
参数:
limit(可选):要返回的表单最大数量(默认:100)skip(可选):分页时要跳过的表单数量(默认:0)
get_form
获取特定表单的详细信息。
参数:
formId(必填):表单ID或路径
create_form
根据模式创建一个新的表单。
参数:
title(必填):可读形式的标题name(必填):机器名称(小写,无空格)path(必填):URL路径(小写,无空格)components(必需):表单组件的数组display(可选):显示类型('表单'、'向导' 或 'PDF')type(可选):表单类型('form' 或 'resource')
update_form
更新现有表单。
参数:
formId(必填):要更新的表单IDupdates(必需):包含要更新字段的对象
delete_form
从项目中删除一个表单。
参数:
formId(必填):要删除的表单ID
create_form_component
辅助工具,用于创建结构良好的表单组件。
参数:
type(必填):组件类型(文本框、电子邮件、数字等)key(必需):唯一组件键label(必填):显示标签required(可选):该字段是否为必填项placeholder(可选):占位符文本description(可选):帮助文本defaultValue(可选):默认值properties(可选):特定组件的额外属性
get_form_preview_url
为表单生成一个可通过浏览器访问的预览URL。此工具返回一个完整的URL,可以在网页浏览器中打开,以查看应用默认样式的渲染后的表单。
参数:
formId(必填):用于生成预览URL的表单ID或路径
返回值: 预览URL的格式为: http://{host}:{port}{basePath}/form/{formPath}/{formId}
示例回复:
Form preview URL: http://localhost:44844/mcp/v1/form/contact/507f1f77bcf86cd799439011
Form: Contact Form
Path: contact
ID: 507f1f77bcf86cd799439011表单预览功能
Form.io MCP 服务器包含一个基于网页的表单预览功能,允许您在浏览器中可视化表单。这在开发过程中特别有助于快速验证表单的结构、布局和外观。
它是如何工作的
- 创建或识别一种形式 使用MCP工具
- 生成预览URL 使用
get_form_preview_url工具 - 在浏览器中打开该网址 查看渲染后的形式
预览页面从您的 Form.io 服务器获取表单 JSON 数据,并使用官方的 Form.io JavaScript 库以默认样式进行渲染。
URL 格式
预览URL遵循以下格式:
http://{host}:{port}{basePath}/form/{formPath}/{formId}示例:
http://localhost:44844/mcp/v1/form/mcp-contact/507f1f77bcf86cd799439011特点/特性
- 交互式预览表单完全支持交互操作——您可以填写字段、触发验证,并查看组件的行为
- 默认样式表单使用Form.io的默认CSS进行渲染,呈现出简洁专业的外观
- 无需认证预览端点是公开可访问的,便于共享(在HTTP模式下运行时)
- 错误处理清除因表单缺失或API故障而显示的错误页面
示例用法
与Claude桌面版(STDIO模式)一起使用:
You: "Create a contact form with name, email, and message fields"
Claude: [Creates the form]
You: "Generate a preview URL for this form"
Claude: [Returns preview URL]
You: [Open the URL in your browser to see the form]在HTTP模式下使用:
# 1. Start the server in HTTP mode
npm run start:http
# 2. Create a form via MCP tools
# 3. Call get_form_preview_url tool with the form ID
# 4. Open the returned URL in your browser预览行为
- 表单交互所有表单组件都是交互式且功能性的
- 验证客户端验证规则已启用,并将显示错误信息
- 提交在预览模式下,表单提交功能已禁用 - 点击提交将显示一条警告信息
- 响应式的预览页面适应不同屏幕尺寸
安全考虑事项
公共访问当以HTTP模式运行时,预览端点被有意设置为公开(无需身份验证),以便轻松共享表单预览。这意味着:
- ✅ 任何拥有预览URL的人都可以查看表单结构
- ✅ 表单不包含敏感数据,仅包含结构和配置
- ❌ 在预览模式下,表单提交功能已禁用
- 根据上面的信息,执行如下指令:
重要的预览URL会暴露您表单的结构(字段名称、验证规则、布局)。请仅与可信赖的方共享预览URL。预览功能不会暴露任何提交的数据,也不允许对表单进行修改。
实时更新
当通过MCP服务器修改表单时,预览页面会自动刷新,无需手动重新加载页面。这实现了无缝的实时编辑体验,使得通过AI工具所做的更改能够立即在浏览器中显示。
工作原理:
- 当你打开表单预览时,页面会建立一个到MCP服务器的服务器发送事件(SSE)连接
- 当你通过MCP工具修改表单(创建、更新或删除)时,服务器会通知所有已连接的预览页面
- 预览页面会自动刷新以显示最新更改
特点:
- 自动更新无需手动刷新,更改即时显示
- 视觉反馈表单更新时显示的简短通知
- 重新连接如果连接丢失,则自动尝试重新连接,并采用指数退避策略
- 连接状态视觉指示器显示连接状态(已连接/重新连接中/已断开)
- 表单删除处理如果在预览打开时删除表单,将显示明确信息
- 消抖(或去抖)多个快速更新被批量处理,以避免过度刷新
连接管理:
- 如果网络中断,连接会自动重新建立
- 在5次重新连接尝试失败后,将显示手动重新连接按钮
- 空闲连接将在5分钟后自动关闭,以节省资源
- 最多支持100个并发预览连接(可配置)
浏览器兼容性: 实时更新在所有支持服务器发送事件(SSE)的现代浏览器中均可正常工作:
- Chrome/Edge 6及以上版本
- Firefox 6及以上版本
- Safari 5及以上版本
- Opera 11+
如果服务器发送事件(SSE)不受支持,预览功能仍然可以使用,但更新将不是自动的——您需要手动刷新页面。
示例交互
在Claude Desktop中配置好后,您就可以使用自然语言与您的表单进行交互了:
创建一个联系表单:
“创建一个联系表单,包含姓名、电子邮件、电话号码和留言字段”
列出现有表单:
“在我的Form.io项目中显示所有表单”
更新表单:
“在联系表单中添加一个‘公司名称’字段”
获取表单详情:
“给我展示一下注册表的完整架构”
支持的组件类型
该服务器支持所有标准的Form.io组件类型:
- 基础文本框、文本区域、数字、密码、复选框、下拉选择、单选按钮、按钮
- 高级的电子邮件、网址、电话号码、标签、地址、日期时间、日期、时间、货币
- 数据选择框、单选按钮、复选框
- 布局HTML元素,内容,列,字段集,面板,表格,井(或良好区域,常用于网页布局中的整洁区块)
- 特别文件,签名,调查
发展
以开发模式运行,自动重建:
npm run dev该服务器使用stdio传输方式,并遵循自2025年年中起的MCP协议规范。
项目结构
formio-mcp/
├── src/
│ ├── index.ts # Main MCP server implementation
│ ├── types/
│ │ └── formio.ts # TypeScript type definitions
│ └── utils/
│ └── formio-client.ts # Form.io API client
├── dist/ # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── README.md故障排除
服务器无法连接:
- 确保路径在
claude_desktop_config.json是正确且绝对的 - 检查构建是否成功:运行
npm run build - 验证环境变量是否设置正确
认证错误:
- 确认您的API密钥或令牌是否有效
- 检查项目URL是否正确(应包含https://)
- 确保您的API密钥具有适当的权限
表单创建失败:
- 验证组件模式是否格式正确
- 检查表单名称和路径是否唯一
- 确保提供了必填字段
实时更新功能无法正常工作:
- 连接指示灯显示“已断开”检查MCP服务器是否正在运行且可访问
- 更新未显示验证表单是通过MCP服务器进行修改的(而不是直接在Form.io用户界面中修改)
- “重新连接”状态持续存在检查浏览器控制台中的错误;可能表明存在网络问题或服务器问题
- “连接失败”消息确保您的浏览器支持服务器发送事件(所有现代浏览器都支持)
- 更新后预览显示的是旧版本尝试强制刷新(Ctrl+Shift+R 或 Cmd+Shift+R)
- 多个预览窗口并非全部更新每个窗口都维护着自己的连接;请检查每个窗口的连接状态
- 连接频繁断开可能表明网络不稳定;请检查服务器日志中的连接错误
预览连接问题:
- “最大连接数已达到”错误关闭未使用的预览窗口或增大(预览窗口的大小)
MCP_MAX_PREVIEW_CONNECTIONS - 连接将在5分钟后关闭这是闲置连接的预期行为;请刷新页面以重新连接
- 手动重新连接按钮出现点击它以重试连接,或刷新页面
- 服务器日志显示连接错误检查防火墙设置,并确保SSE终端点可访问
实时更新的调试:
- 打开浏览器开发者工具(F12),并在控制台(Console)选项卡中检查错误
- 检查“网络”选项卡以查看
/preview-updates/{formId}连接(应显示为“EventStream”类型) - 在网络标签页中,点击连接以查找SSE事件
- 检查服务器日志中的通知消息和连接生命周期事件
- 验证预览URL中的表单ID是否与正在修改的表单一致
API 参考
表单更新通知器 API
这个(或“该”) FormUpdateNotifier 该服务管理表单预览连接的实时通知。
位置: src/services/form-update-notifier.ts
方法
registerPreviewConnection(connectionId: string, formId: string): void
- 注册一个预览连接以接收特定表单的更新
- 当预览页面建立SSE(服务器发送事件)连接时自动调用
- 参数:
- connectionIdSSE 连接的唯一标识符 - formId要监视更新的表单ID
unregisterPreviewConnection(connectionId: string): void
- 注销预览连接并停止发送更新
- 当预览页面关闭或连接丢失时自动调用
- 参数:
- connectionId要注销的连接ID
notifyFormCreated(formId: string, formData: FormioForm): void
- 通知所有正在监视表单的预览连接,该表单已被创建
- 被自动调用
create_form工具处理器 - 参数:
- formId创建的表单的ID - formData完整的表单对象
notifyFormUpdated(formId: string, formData: Partial): void
- 通知所有正在查看表单的预览连接,表单已更新
- 由……自动调用
update_form工具处理程序 - 实现防抖动功能以避免过多通知
- 参数:
- formId更新后的表单ID - formData更新后的表单数据(部分或全部)
notifyFormDeleted(formId: string): void
- 通知所有正在预览表单的连接,该表单已被删除
- 由……自动调用
delete_form工具处理程序 - 参数:
- formId已删除表单的ID
getConnectionsByForm(formId: string): string[]
- 返回当前正在监控特定表单的所有连接ID
- 有助于调试和监控
- 参数:
- formId要查询的表单ID
- 返回:连接ID的数组
getFormByConnection(connectionId: string): string | undefined
- 返回特定连接正在监视的表单ID
- 用于调试和监控
- 参数:
- connectionId要查询的连接ID
- 返回:如果找到连接,则返回表单ID;否则返回undefined
cleanup(): void
- 清理所有连接和内部状态
- 在服务器关闭时自动调用
- 应在服务器停止之前调用,以确保优雅地进行清理
使用示例
import { FormUpdateNotifier } from './services/form-update-notifier';
import { SSEManager } from './transport/sse-manager';
// Initialize
const sseManager = new SSEManager();
const notifier = new FormUpdateNotifier(sseManager);
// Register a preview connection (done automatically by preview endpoint)
notifier.registerPreviewConnection('conn-123', 'form-456');
// Notify of form update (done automatically by tool handlers)
notifier.notifyFormUpdated('form-456', { title: 'Updated Form' });
// Check active connections
const connections = notifier.getConnectionsByForm('form-456');
console.log(`${connections.length} preview(s) watching this form`);
// Cleanup on shutdown
notifier.cleanup();表单预览客户端API
这个(或:该) FormPreviewClient 是一个嵌入在预览页面中的JavaScript类,用于管理客户端连接和更新处理。
地点: src/templates/form-preview-client.js (嵌入在 form-preview.ts)
构造函数
new FormPreviewClient(formId: string, formPath: string, config?: PreviewClientConfig)
- 创建一个新的预览客户端实例
- 参数:
- formId要监视更新的表单ID - formPath表单路径(用于显示) - config (可选):配置对象 - maxReconnectAttempts最大重连尝试次数(默认:5) - initialReconnectDelay初始重连延迟(单位:毫秒)(默认值:1000) - updateIndicatorDuration更新通知显示多长时间(毫秒)(默认:2000)
方法
connectToUpdates(): void
- 建立SSE连接以接收表单更新
- 页面加载时自动调用
- 为更新和删除事件设置事件监听器
- 处理连接错误和重新连接
disconnect(): void
- 关闭SSE连接并进行清理
- 在页面卸载时自动调用
- 如果需要停止接收更新,应手动调用
handleUpdateEvent(event: MessageEvent): void
- 处理表单更新通知
- 自动刷新页面以显示最新更改
- 在刷新前显示简短的更新指示器
- 当接收到更新事件时自动调用
handleDeletedEvent(event: MessageEvent): void
- 处理表单删除通知
- 显示消息,表明表单不再可用
- 关闭SSE连接
- 当接收到删除事件时自动调用
reconnectWithBackoff(): void
- 尝试使用指数退避策略重新连接
- 当连接丢失时自动调用
- 增加尝试之间的延迟(1秒、2秒、4秒、8秒、16秒)
- 在达到最大尝试次数后显示手动重新连接按钮
showUpdateIndicator(): void
- 显示简短通知,表明表单已更新
- 在页面刷新前自动调用
- 通知在2秒后消失或页面刷新时消失
showConnectionStatus(status: 'connected' | 'reconnecting' | 'disconnected'): void
- 更新连接状态指示器
- 当连接状态发生变化时自动调用
- 视觉指示器帮助用户了解连接状态
使用示例
// Automatically initialized in preview pages
const client = new FormPreviewClient('form-123', 'contact-form', {
maxReconnectAttempts: 5,
initialReconnectDelay: 1000
});
// Connect to receive updates
client.connectToUpdates();
// Manually disconnect if needed
// client.disconnect();
// Connection state is managed automatically
// Status indicator updates as connection changes接收到的事件
form-update 事件:
{
type: 'form-update',
data: {
formId: 'form-123',
timestamp: '2025-10-10T12:00:00.000Z',
changeType: 'updated'
}
}form-deleted 事件:
{
type: 'form-deleted',
data: {
formId: 'form-123',
timestamp: '2025-10-10T12:00:00.000Z'
}
}Form.io API 参考手册
如需查看详细的Form.io API文档,请访问: https://apidocs.form.io/ 的中文翻译可以是:“https://apidocs.form.io/(表单.io API 文档)”。不过,通常在实际应用中,我们可能会直接保留网址的原样,因为网址本身已经具有明确的指向性,直接翻译可能并不增加信息的清晰度。但如果需要对网址进行简要说明,可以如上所述添加描述性文字
许可证
麻省理工学院(MIT)
