Appearance
数据函数
数据函数是模板的关键配置之一,用来生成填充模板的数据或者阻止一次渲染过程。
函数是异步的
数据函数是一个异步函数,函数内可以使用 javascript 语法中的 await
来加载远程资源或 KMS 配置中心的数据。
js
async function main(getConfigData, request, utils){
const config = await getConfigData("gray-days")
return {
config: JSON.stringify(config)
}
}
函数返回值限制
函数需要返回一个非空对象,或者包含非空对象的数组。
- 如果返回一个非空对象,则模板会被渲染一次,并产生一个静态化文件
- 如果返回一个数组,则数组内每一个非空对象都会被渲染一次
如果需要返回一个数组,但又不需要渲染多次的,请用一个对象字面量包装数组即可:
js
...
return {
data: [ ... ]
}
函数内置工具
函数支持使用 getConfigData
获取 KMS 的配置中心数据,使用 request
获取其他 URI 的数据。其中 request
仅仅支持 GET
请求。
getConfigData(keyOrAlias [, Options])
keyOrAlias: 指定配置的 key 或者 别名;
Options: 数据过滤配置,等同于 Data API 查询参数;
request(url, [params [, headers]])
url: 远程资源的完整 URL 地址,且需要是公网可以访问;
params: 附加到 URL 上的参数对象,比如 { name: "test" }
如果不需要可以传递 null
headers: 请求中附加的 Header 信息,通常用于认证或者附加来源信息等,比如 { "x-token": "xxxxx" }
js
async function main(getConfigData, request, utils){
const response = await request("https://my.site/path/to/api")
.catch(function(){
return {
data: []
}
});
return {
config: response.data
}
}
注意
使用 request 一定 不要忘记添加 catch
逻辑,原因是网络请求总是会因为网络抖动,或者其他异常而失败。
在 catch
逻辑中可以设置一个合理的返回值,可以让 数据函数
返回一个可以预期的结果,从而使得静态化正常运行。
更多工具函数
除了上述两个获取数据的工具函数外,还额外提供了数个小工具函数,包括 md5
sha256
计算 Hash 的工具,还有 json2yaml
进行格式转化的工具等。可以在函数编辑界面查看 速查手册
。
阻止单次渲染
通常情况下,模板触发一次就会渲染一次。不过在某些情况下可以通过 数据函数
返回 null
来主动阻止一次渲染。以上面 request 失败的情况为例:
js
async function main(getConfigData, request, utils){
const response = await request("https://my.site/path/to/api")
.catch(function(){
// 网络请求失败,则返回 null 给 repsonse
return null
});
// 如果网络请求失败,则中断本次渲染
if (response === null) {
return null
}
// request 没有错误的情况下继续正常渲染过程
return {
config: response.data
}
}