在 Azure Functions 输出绑定中使用变量

Yan*_*ony 8 javascript node.js azure-functions

我正在使用带有 javascript 的 Azure 函数,我想修改path我函数中的 out 绑定。例如,这是我的function.json

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "name": "outputBlob",
      "path": "container/{variableCreatedInFunction}-{rand-guid}",
      "connection": "storagename_STORAGE",
      "direction": "out",
      "type": "blob"
    }
  ]
Run Code Online (Sandbox Code Playgroud)

我想设置{variableCreatedInFunction}index.js,例如:

module.exports = async function (context, req) {
    const data = req.body
    const date = new Date().toISOString().slice(0, 10)
    const variableCreatedInFunction = `dir/path/${date}`
    if (data) {
        var responseMessage = `Good`
        var statusCode = 200
        context.bindings.outputBlob = data
    } else {
        var responseMessage = `Bad`
        var statusCode = 500
    }
    context.res = {
        status: statusCode,
        body: responseMessage
    };
}
 
Run Code Online (Sandbox Code Playgroud)

找不到任何方法,这可能吗?

eli*_*eli 3

绑定在函数执行之前解析。您可以用作{DateTime}绑定表达式。默认情况下它将是yyyy-MM-ddTHH-mm-ssZ. {DateTime:yyyy}您也可以使用(以及其他格式模式,根据需要)。

命令式绑定(这是您想要实现的)仅在 C# 和其他 .NET 语言中可用,文档说

运行时绑定 在 C# 和其他 .NET 语言中,您可以使用命令式绑定模式,而不是 function.json 和属性中的声明式绑定。当需要在运行时而不是设计时计算绑定参数时,命令式绑定非常有用。要了解更多信息,请参阅C# 开发人员参考C# 脚本开发人员参考

MS 现在可能也已将其添加到 JS 中,因为我很确定我一年多前就读过该部分,但我找不到任何与之相关的内容。也许你可以自己挖掘一下。

如果您的请求内容是 JSON,则替代方法是在请求中包含路径,例如:

{
  "mypath":"a-path",
  "data":"yourdata"
}
Run Code Online (Sandbox Code Playgroud)

然后您就可以像这样进行声明性绑定:

{
  "name": "outputBlob",
  "path": "container/{mypath}-{rand-guid}",
  "connection": "storagename_STORAGE",
  "direction": "out",
  "type": "blob"
}
Run Code Online (Sandbox Code Playgroud)

如果您需要 的名称/路径Blob,您可能必须将两个函数链接在一起,其中一个函数充当入口点和路径生成器,而另一个函数则处理Blob(当然还有绑定)。事情会是这样的:

  • HttpTrigger用and Queue(输出)声明第一个函数。
  • 让第一个函数创建包含{date}-{guid}.
  • 将消息及其内容插入到队列输出中{"mypath":"2020-10-15-3f3ecf20-1177-4da9-8802-c7ad9ada9a33", "data":"some-data"}(当然,用您自己生成的值替换日期和 guid...)
  • QueueTrigger使用和 -needs声明第二个函数Blob,仍然Blob像以前一样绑定路径,但没有{rand-guid},只是{mypath}
  • 现在,它既mypath用于 blob 输出(声明性),又可以从队列消息中获取可用信息。