gpt4 book ai didi

javascript - Azure Function 传出存储队列绑定(bind)在上下文中不可用

转载 作者:行者123 更新时间:2023-12-01 01:16:41 24 4
gpt4 key购买 nike

我有一个非常简单的 Azure 函数,其唯一目的是获取 blob 中包含的所有消息并将这些消息放入存储队列中。

我正在运行 Functions 2.x,该函数是用 JavaScript 编写的,并且我已经注册了一个 blob 触发器和一个存储队列的输出绑定(bind)。

我遇到的问题是我的函数的 ctx.bindings 中的输出绑定(bind)不可用。我正在使用命名输出绑定(bind),因为我将有多个输出绑定(bind)。当我将输出绑定(bind)名称更改为 $return 并返回数据时,消息将按预期写入队列,但当我设置不同的名称时,绑定(bind)不会显示在上下文中。不过,我可以在 ctx.bindingDefinitions 中看到绑定(bind)定义。

我使用 Azure Function Host 在本地运行代码,并安装了正确的扩展。

我的代码是这样的:

import { Context } from '@azure/functions'

export async function run(ctx: Context , content: string): Promise<void> {
try {
const data = JSON.parse(content)

if (!ctx.bindings[data.queue]) {
throw new Error(`No output binding defined for queue '${data.queue}'`)
}

ctx.bindings[data.queue] = [...data.messages]
} catch (e) {
return Promise.reject(e)
}
}

还有我的 function.json:

{
"disabled": false,
"bindings": [
{
"name": "content",
"type": "blobTrigger",
"direction": "in",
"path": "message-batches/{filename}.txt"
},
{
"type": "queue",
"direction": "out",
"name": "message",
"queueName": "message",
"connection": "AZURE_STORAGE_CONNECTION_STRING"
}
],
"scriptFile": "index.js"
}

我传入的 content 绑定(bind)可用作 ctx.bindings.content。我想我可能在这里遗漏了一些微不足道的东西,但是绑定(bind)没有显示在 ctx.bindings 下的原因可能是什么?

最佳答案

在运行时填充内容之前,输出绑定(bind)在 Context.bindings 中不可用。

如果我们想检查输出定义是否存在,请转向Context.bindingDefinitions

let flag:boolean = false;

for (let bindingDefinition of ctx.bindingDefinitions) {
if(bindingDefinition.name == data.queue) {
flag = true;
break;
}
}

if(!flag){
throw new Error(`No output binding defined for queue '${data.queue}'`)
}

关于javascript - Azure Function 传出存储队列绑定(bind)在上下文中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54687036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com