Hypernova客户端规范详解:从请求构建到生命周期管理
2025-07-07 08:11:02作者:龚格成
什么是Hypernova客户端
Hypernova是一个服务端渲染解决方案,它允许开发者在Node.js服务器上渲染JavaScript组件。客户端规范定义了如何与Hypernova服务进行交互,包括请求构建、错误处理和生命周期管理等关键环节。
核心请求流程
1. 视图数据准备阶段
首先,客户端需要为每个视图调用getViewData(name, data)
方法:
- 这个方法接收视图名称和初始数据
- 返回值将作为Jobs对象中对应视图的
data
字段值 - 这一步允许在发送请求前对视图数据进行预处理或转换
2. 请求准备阶段
接下来调用prepareRequest(currentJobs, originalJobs)
方法:
- 这是一个reducer类型的函数
- 接收当前Jobs对象和原始Jobs对象
- 返回值将成为新的Jobs对象
- 可以在此阶段对请求数据进行聚合或过滤
3. 请求发送决策
调用shouldSendRequest(jobs)
方法决定是否发送请求:
- 如果返回false,则创建响应对象
- 响应对象的
html
属性使用客户端渲染的备用输出 error
属性设为null- 这个机制可以用于实现请求缓存或条件渲染
4. 请求发送阶段
调用willSendRequest(jobs)
方法:
- 这是一个事件类型的函数
- 在HTTP POST请求发送前被调用
- 可以在此处添加日志记录或性能监控
错误处理机制
在任何阶段发生错误时:
- 创建响应对象
error
属性设置为抛出的错误html
属性使用客户端渲染的备用输出- 调用
onError(error, jobs)
进行错误处理
响应处理流程
当从服务器收到响应后:
- 遍历响应,对每个包含错误的job调用
onError(error, job)
- 确保每个job都有
html
字段且为字符串类型 - 如果没有HTML则使用客户端渲染的备用输出
- 调用
onSuccess(response, jobs)
处理成功响应 - 调用
afterResponse(currentResponse, originalResponse)
进行响应后处理
URL构建与请求格式
URL构建规则
Hypernova服务的URL由以下部分组成:
- 主机地址(HOST):运行Hypernova服务的主机,本地测试通常为localhost
- 端口号(PORT):Hypernova服务配置的端口
- 路径:固定为
/batch
完整URL示例:http://localhost:3030/batch
请求体格式
POST请求体应包含Jobs对象,格式如下:
{
"组件名称": {
"name": "组件名称",
"data": {
// 组件属性数据
"prop1": true,
"prop2": ["值1", "值2"]
}
}
}
插件生命周期API详解
数据转换API
getViewData(viewName: string, data: any): any
- 允许修改视图接收的数据
- 在请求发送前对特定视图数据进行转换
请求处理API
prepareRequest(currentJobs: Jobs, originalJobs: Jobs): Jobs
- 请求准备阶段的reducer函数
- 可以对Jobs对象进行整体修改
响应处理API
afterResponse(currentResponse: any, originalResponse: Response): any
- 响应处理阶段的reducer函数
- 允许对原始响应进行转换后再使用
事件回调API
onSuccess(response: any, jobs: Jobs): void
- 请求成功时触发
- 适合用于性能监控或成功日志记录
onError(err: Error, jobs: Jobs): void
- 任何错误发生时触发
- 应该实现健壮的错误处理逻辑
最佳实践建议
- 在
getViewData
中实现数据标准化,确保不同环境下的数据一致性 - 利用
prepareRequest
实现请求数据的压缩或敏感信息过滤 - 在
shouldSendRequest
中实现请求缓存,避免不必要的服务端渲染 - 在
afterResponse
中添加响应数据的验证逻辑 - 在错误处理中确保总有可用的客户端渲染备用方案
通过遵循这些规范,开发者可以构建出健壮的Hypernova客户端,实现高效可靠的服务端渲染流程。