Skip to content
本页索引

数据函数

数据函数是模板的关键配置之一,用来生成填充模板的数据或者阻止一次渲染过程

函数是异步的

数据函数是一个异步函数,函数内可以使用 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
    }
}