【问题标题】:Node.JS Firebase Cloud Function - HTTP Request - Return JSON response to clientNode.JS Firebase 云函数 - HTTP 请求 - 向客户端返回 JSON 响应
【发布时间】:2021-03-12 12:36:55
【问题描述】:

我正在编写一个 Firebase 云函数,以便在 HTTP 触发时连接到外部数据库。

此函数将执行以下操作:

  1. 用户提交帐号和邮政编码
  2. 云功能被触发
  3. 帐号被附加到请求中的 URL,外部数据库返回帐号和邮政编码。

我需要将响应正文返回给客户端。

var functions = require('firebase-functions');
var request = require('request');

exports.account_verification = functions.https.onCall((data, context) => {
    console.log("Data: " + data.text);
    console.log("Context: " + context)

    var options = {
        'method': 'GET',
        'url': '**REDACTED**' + JSON.parse(data.text).customerno,
        'headers': {
        }
    };


     request(options, function (error, response) {
        if (error) throw new Error(error);
        console.log("RESPONSE BODY: ", JSON.parse(response.body).firebase_accounts);
        console.log("Data Submitted: ", data.text);
        console.log("Account Submitted: ", JSON.parse(data.text).customerno);
        console.log("Zip Submitted: ", JSON.parse(data.text).zipcode);

        //data returned from external database
        //Example: firebase_accounts:[{"customerno" : "Example Customer", "zipcode" : "Example Zip Code"}]


        var response_returned = JSON.parse(response.body).firebase_accounts;
         console.log("Data Returned -- Parsed: ", response_returned);
        //Example: [{"customerno" : "Example Customer", "zipcode": "Example Zip Code"}]

 //Response Body available here but will not return to client

    });

//Return to client will work here but cannot access response data

});

【问题讨论】:

  • 您分享的代码有什么问题?当您在 Cloud Functions 或 emulator 中运行它时,哪一行不符合您的预期?
  • 我在云功能中运行它,暂时不是云模拟器。我正在尝试以 JSON 格式将“返回的响应”返回给客户端。 //从外部数据库返回的数据 var response_returned = JSON.parse(response.body).firebase_accounts; console.log("返回的数据 -- 已解析:", response_returned); }); //return 在这里有效,但响应体无法返回 });
  • 请编辑您的问题以包含附加信息,以便您可以使用格式化工具使其更具可读性。
  • Frank,感谢您抽出宝贵时间查看我的帖子;我已经编辑了这个问题,希望能为手头的问题带来更多的澄清。最好的问候,-Arcade336

标签: node.js json request google-cloud-functions


【解决方案1】:

由于您正在执行异步请求,因此您需要确保 Cloud Functions 等待该结果。这有时被称为冒泡结果。

使用 Promise 是最简单的,但由于您使用的是 request 模块,因此其中不可用。相反,您可以创建自己的 Promise,如下所示:

var functions = require('firebase-functions');
var request = require('request');

exports.account_verification = functions.https.onCall((data, context) => {
    var options = {
        'method': 'GET',
        'url': '**REDACTED**' + JSON.parse(data.text).customerno,
        'headers': {
        }
    };

    return new Promise(function(resolve, reject) {
      request(options, function (error, response) {
        if (error) reject(error);

        var response_returned = JSON.parse(response.body).firebase_accounts;

        resolve(response_returned);
      });
    })
});

【讨论】:

  • 弗兰克,成功了!谢谢你花时间回答我的问题。这让我难过了一阵子。我真的很感谢你在这方面的帮助。最好的问候,-Arcade336
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2018-02-09
相关资源
最近更新 更多