【问题标题】:If data is undefined, at least one attribute must be present pubsub如果数据未定义,则必须至少存在一个属性 pubsub
【发布时间】:2022-02-14 11:52:38
【问题描述】:

我正在尝试使用 Google Cloud 的 Pub/Sub API 向主题订阅者发送消息,但我遇到了返回消息“如果数据未定义,则必须存在至少一个属性”的问题.”。我打算将它与 Cloud Functions 一起使用。我有以下代码,它与官方 Pub/Sub NodeJS 文档相同,但有细微的变化:

exports.helloWorld = async (req, res) => {

    const parse = require('url-parse');
    const punycode = require('punycode');
    const {PubSub} = require('@google-cloud/pubsub');

    let message = req.query.message || req.body.message || 'Hello World!';

    let referHeader = req.headers.referer;
    let userIP = req.socket.remoteAddress;
    let originHeader = req.headers.origin;
    let userAgenteHeader = req.useragent;
    let a = req.query.a;
    let s = req.query.s;
    let e = req.query.e;

    try {
        
        const pubSubClient = new PubSub({
            project_id: 'my-project',
            credentials: {
                private_key: "my_private_key",
                client_email: 'email_project@myemail.com',
            }
        });

        a = 123; //Change for test
            
        let topicNameOrId = 'MY_TOPIC_ID';

        const data = JSON.stringify({
            "data": "analytics",
            "attributes": {
              "a": a
            }
          });

        const dataBuffer = Buffer.from(data);

        const messageId = await pubSubClient
          .topic(topicNameOrId)
          .publishMessage(dataBuffer);

        res.status(200).send(`Message ${messageId} published.`);

      } catch (error) {

        console.error();
        res.status(403).send(`${error.message}`);

        process.exitCode = 1;
      }
};

我试过用 JSON.stringify 来做,没有它,直接在函数中,但没有任何效果,它总是给出同样的错误,我正在正常传递数据参数。

【问题讨论】:

    标签: javascript node.js google-cloud-functions google-cloud-pubsub


    【解决方案1】:

    我尝试了您的代码,并且能够重现您的错误。调试你的代码后,当它使用publishMessage() 时它被卡住了。显然publishMessage() 接受一个消息对象。

    publishMessage(message: MessageOptions): Promise;

    改用publish(),它接受缓冲区对象。

    发布(数据:缓冲区,属性?:属性):承诺;

    在您的代码中应用 publish(),使用以下修复:

    const messageId = await pubSubClient.topic(topicNameOrId).publish(dataBuffer);
    

    云函数输出:

    实际发布订阅消息:

    【讨论】:

      猜你喜欢
      • 2022-11-04
      • 2019-07-06
      • 1970-01-01
      • 2020-08-05
      • 2018-10-19
      • 2018-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多