如何从 GCP Functions GUI 调用 PubSub 函数
How invoke a PubSub function from the GCP Functions GUI
我部署了以下功能:
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"}}}
我不断收到以下输出:
Error: function execution failed. Details:
The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined
我错过了什么?
我已经使用 Firebase 部署了该函数。不知道这是否有所作为...
事实上,@eespinola 几乎为您指明了正确的方向。如果您仔细检查他提供的 link,您会发现 Cloud Functions 默认订阅者代码段:
/**
* 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 编码的字符串。此外,如果您搜索 PubSub 的 API 文档,您将找到消息的 JSON representation 语法:
{
"data": string,
"attributes": {
string: string,
...
},
"messageId": string,
"publishTime": string
}
因此,您需要使用该格式将您的负载编码为 base64 字符串,并将其转换回函数内的 Javascript 对象。
我部署了以下功能:
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"}}}
我不断收到以下输出:
Error: function execution failed. Details: The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined
我错过了什么?
我已经使用 Firebase 部署了该函数。不知道这是否有所作为...
事实上,@eespinola 几乎为您指明了正确的方向。如果您仔细检查他提供的 link,您会发现 Cloud Functions 默认订阅者代码段:
/**
* 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 编码的字符串。此外,如果您搜索 PubSub 的 API 文档,您将找到消息的 JSON representation 语法:
{
"data": string,
"attributes": {
string: string,
...
},
"messageId": string,
"publishTime": string
}
因此,您需要使用该格式将您的负载编码为 base64 字符串,并将其转换回函数内的 Javascript 对象。