使用 firebase 云功能向非谷歌服务器发送 POST 请求

IT技术 javascript firebase google-cloud-functions
2021-01-29 18:01:35

我想知道是否可以使用 firebase 云功能将发布请求发送到非谷歌服务器(据我所知,我需要参与 blaze 计划才能与非谷歌服务器进行交互)

基本上,每当将值添加到我的数据库时,我都想 POST 到在 arduino 上运行的外部服务器。

我查看了文档并找到了让云功能响应 HTTP 发布请求(HTTP 云功能)的示例,但似乎找不到任何发布到外部服务器的示例。这可能吗?

5个回答

注意:请求包已被弃用,如 npm 页面request-npm 中所述考虑使用其他替代方案,如axios

这可以使用requestmodule来完成

// import the module
var request = require('request');

// make the request
request('put your external url here', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        //here put what you want to do with the request
    }
})

注意:这仅适用于付费计划。Firebase 定价页面所述,无法使用免费 Spark 计划调用非谷歌 API

Spark 计划只允许对 Google 拥有的服务发出出站网络请求。配额内允许入站调用请求。在 Blaze 计划中,Cloud Functions 提供永久免费层。每月免费提供前 2,000,000 次调用、400,000 GB 秒、200,000 CPU 秒和 5 GB 的 Internet 出口流量。您只需为超过此免费配额的使用量付费。定价基于调用总数和计算时间。计算时间根据为函数配置的内存和 CPU 量而变化。使用限制也通过每日和 100 秒配额强制执行。有关更多信息,请参阅Cloud Functions 定价

@matth 你需要安装请求module npm install request
2021-03-16 18:01:35
如果您的请求是针对其他 Google 拥有的服务,这将适用于未付费帐户(Spark 计划)。“Spark 计划只允许向 Google 拥有的服务发出出站网络请求。在配额内允许入站调用请求。” ( firebase.google.com/pricing )
2021-03-17 18:01:35
还需要付费的 Firebase 帐户 - 适用于 Blaze 计划
2021-04-09 18:01:35
Error: Error parsing triggers: Cannot find module 'request'在进行 firebase 部署时得到var request = require('request');
2021-04-09 18:01:35
它更像是npm i --save request来自 ./project/functions 文件夹
2021-04-09 18:01:35

您需要安装该软件包。转到终端中的 Firebase-Funcions 目录并输入

npm install request

或者

npm install request-promise

使用此示例进行测试:https : //www.npmjs.com/package/request

实际上,要成功使用 firebase 函数,所有npm installs 都需要使用--save标志来完成只是要记住一些事情,以避免在部署时出现烦人的“找不到module”错误。
2021-03-21 18:01:35
@HirdayGupta因为npm@5.0.0(5月25日2017年)--save默认情况下添加
2021-04-13 18:01:35

请记住将module安装在函数文件夹中!

cd functions
npm i --save request

对于那些想要使用 JSON 正文发帖的人,这就是您可以做到的。(我知道我不久前需要这个)

export function postWithBodyToExternalUrl(url: string, bdy: any): Promise<ReqResponse> {

  const request = require('request');

  const options = {
    url: url,
    json: true
  };
  return new Promise(function (resolve, reject) {
    request(options, function (err, resp) {
      if (err) {
        console.log(err);
        reject({ err: err });
      }
      resolve(bdy);
    });
  });
}

axios也是处理网络调用的优秀库之一。一些特点:

  • 从浏览器发出 XMLHttpRequests
  • 从 node.js 发出 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • JSON 数据的自动转换
  • 客户端支持防止 XSRF
  • github 上67k+颗星
  • github 文档了解更多
我不得不做一些挖掘,看看为什么它比请求更好,获取....
2021-03-31 18:01:35