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

问题描述 投票:0回答:1

我正在用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}!`);

};

发布的发布订阅消息为:

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

[当我尝试从上述发布的消息中访问云功能中的“ companyName”时,我得到的日志输出为“公司名称未定义”。下面是我正在尝试的代码:

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

您的有用答案将不胜感激。谢谢 !

node.js google-cloud-platform google-cloud-functions publish-subscribe google-cloud-pubsub
1个回答
0
投票

您无法访问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}!`);

};
© www.soinside.com 2019 - 2024. All rights reserved.