Как вызвать функцию PubSub из функций GCP GUI - PullRequest
0 голосов
/ 29 марта 2020

У меня развернута следующая функция:

interface MessageData {
  reviewId: string;
}

export const applyPreAssessRules = functions
  .pubsub.topic("applyPreAssessRules")
  .onPublish(async (message) => {
    const { reviewId } = message.json as MessageData;
    ...
  }

Облачная платформа GUI предоставляет страницу для тестирования функции, но я не могу понять, как отформатировать ввод.

Я пробовал несколько вещей, в том числе:

{"reviewId": "LRuvmv14u7c47IRiravi"}
{"message": {"reviewId": "LRuvmv14u7c47IRiravi"}}
{"message": { "json": {"reviewId": "LRuvmv14u7c47IRiravi"}}}

Я получаю следующий вывод:

Ошибка: не удалось выполнить функцию. Детали: Первый аргумент должен быть одним из типа string, Buffer, ArrayBuffer, Array или Array-like Object. Полученный тип не определен

Что мне не хватает?

Я развернул функцию с помощью Firebase. Не знаю, если это имеет значение ...

1 Ответ

1 голос
/ 09 апреля 2020

На самом деле @eespinola указывала вам почти в правильном направлении. Если вы внимательно изучите ссылку , которую он предоставил, вы найдете фрагмент подписчика по умолчанию для облачных функций:

/**
 * Triggered from a message on a Cloud Pub/Sub topic.
 *
 * @param {object} pubsubMessage The Cloud Pub/Sub Message object.
 * @param {string} pubsubMessage.data The "data" property of the Cloud Pub/Sub Message.
 */
exports.subscribe = (pubsubMessage) => {
  // Print out the data from Pub/Sub, to prove that it worked
  console.log(Buffer.from(pubsubMessage.data, 'base64').toString());
};

Этот фрагмент показывает, что событие pubsub содержит поле с именем "data", которое строка в кодировке base64 Более того, если вы будете искать в документации API для PubSub, вы найдете синтаксис JSON представления для сообщения:

{
  "data": string,
  "attributes": {
    string: string,
    ...
  },
  "messageId": string,
  "publishTime": string
}

Поэтому вам необходимо кодировать полезную нагрузку в виде строки base64 с этим форматом и преобразовать его обратно в Javascript объект внутри функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...