javascript - Azure 函数传出存储队列绑定在上下文中不可用
问题描述
我有一个非常简单的 Azure 函数,其唯一目的是获取 blob 中包含的所有消息并将这些消息放在存储队列中。
我正在运行 Functions 2.x,该函数是用 JavaScript 编写的,并且我已经为存储队列注册了一个 blob 触发器和一个输出绑定。
我遇到的问题是输出绑定在我的函数中不可用。ctx.bindings
我正在使用命名输出绑定,因为我将有多个输出绑定。当我将输出绑定名称更改为$return
并返回我的数据时,消息会按预期写入队列,但是当我设置不同的名称时,绑定不会显示在上下文中。但是,我可以在ctx.bindingDefinitions
.
我正在使用 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
绑定可用作ctx.bindings.content
. 我想我可能在这里遗漏了一些微不足道的东西,但是绑定不显示在下面的原因可能是什么ctx.bindings
?
解决方案
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}'`)
}
推荐阅读
- python - 如何使 xlabels 垂直并减小热图中颜色条的大小
- jmeter - 我的访问令牌每次都被覆盖
- python - Visual Studio 2019 python 3.7 64 位,未解决的导入警告
- sas - 为 SAS 中的所有字符串变量全局设置长度
- javascript - 导航栏上方有空格
- java - 如何计算不重复存在的字母数量
- sql - 使用手动列连接取消透视 T-SQL 查询
- rust - 为什么我可以在共享引用上调用 Write::write_all,即使它需要可变引用?
- apollo - 如何制作阿波罗服务器预处理器
- javascript - 如何在 c3.js 中使用多个 XY 折线图构造多个数据数组