Привязка исходящей очереди хранения функции Azure недоступна в контексте - PullRequest
0 голосов
/ 14 февраля 2019

У меня действительно простая функция Azure с единственной целью: взять все сообщения, включенные в большой двоичный объект, и поместить эти сообщения в очередь хранения.

Я запускаю функции 2.x, функция написанав JavaScript, и я зарегистрировал триггер BLOB-объекта и выходную привязку для очередей хранения.

Проблема, с которой я столкнулся, заключается в том, что выходная привязка недоступна в ctx.bindings в моей функции.Я использую именованную выходную привязку, потому что у меня будет несколько выходных привязок.Когда я изменяю имя выходной привязки на $return и возвращаю свои данные, сообщения записываются в очередь, как и ожидалось, но когда я задаю другое имя, привязка не отображается в контексте.Однако я могу увидеть определение привязки в ctx.bindingDefinitions.

Я выполняю код локально с помощью узла функций Azure с установленными соответствующими расширениями.

Мой код выглядит следующим образом:

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?

1 Ответ

0 голосов
/ 15 февраля 2019

Выходная привязка недоступна в 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}'`)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...