如何访问来自 GCP pubsub 的单个请求参数作为云功能节点 js 的输入?

How to access individual request param coming from GCP pubsub as a input to the cloud function node js?

我正在用 node js 编写一个云函数,我的要求是 GCP pubsub 主题将发布一个 json 正文作为消息。这个 pubsub 主题是我的节点 js 云函数的触发点。这意味着每当我从主题发布消息时它应该触发我的云功能。此功能按预期工作。但是问题出在我试图访问我的云函数中 Json 请求数据的单个元素的地方。如果我在我的云功能中记录来自 pubsub 的数据,我就可以做到这一点。 我的 index.js

exports.helloPubSub = (data, context) => {
  const pubSubMessage = data;
  const messageData = pubSubMessage.data
    ? Buffer.from(pubSubMessage.data, 'base64').toString()
    : 'World';

  console.log(`message data is, ${messageData}!`);

};

发布的 pubsub 消息是:

{
    "companyName": "my-company",
    "companyLocation": "my-location"
}

当我尝试从上面发布的消息访问我的云函数中的 "companyName" 时,我得到的日志输出为 "company name is undefined"。下面是我正在尝试的代码:

exports.helloPubSub = (data, context) => {
  const pubSubMessage = data;
  const messageData = pubSubMessage.data
    ? Buffer.from(pubSubMessage.data, 'base64').toString()
    : 'World';

  console.log(`company name is, ${messageData.companyName}!`);

};

注意:我指的是https://cloud.google.com/functions/docs/tutorials/pubsub

我们将不胜感激您的有用回答。谢谢 !

您无法访问 companyName,因为您试图从 string 访问 属性。

要访问从 PubSub 发送的数据,您需要使用 JSON 解析解码的字符串。

试试下面的代码:

 exports.helloPubSub = (event, context) => {
  const message = Buffer.from(event.data, 'base64').toString();
  const messageData = JSON.parse(message)

  console.log(`company name is, ${messageData.companyName}!`);

};