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

Posted

技术标签:

【中文标题】使用 firebase 云功能向非谷歌服务器发送 POST 请求【英文标题】:Use firebase cloud function to send POST request to non-google server 【发布时间】:2017-09-10 23:06:19 【问题描述】:

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

基本上,只要将值添加到我的数据库中,我就想 POST 到在 arduino 上运行的外部服务器。

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

【问题讨论】:

研究使用节点的 request-promise 库来发出传出 HTTP 请求。 github.com/request/request-promise “服务”功能是否也需要付费计划? 【参考方案1】:

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

这可以使用request 模块来完成:

// 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 pricing page 所述,无法使用免费的 Spark 计划调用非 Google API:

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

【讨论】:

还需要付费的 Firebase 帐户 - 适用于 Blaze 计划 如果您的请求是针对其他 Google 拥有的服务的,这将适用于未付费帐户(Spark 计划)。 “Spark 计划只允许向 Google 拥有的服务发出出站网络请求。在配额内允许入站调用请求。” (firebase.google.com/pricing) 我在使用 var request = require('request'); 进行 firebase 部署时收到 Error: Error parsing triggers: Cannot find module 'request' @matth 你需要安装请求模块npm install request 它更像是 ./project/functions 文件夹中的 npm i --save request【参考方案2】:

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

从浏览器发出 XMLHttpRequests 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 取消请求 JSON 数据的自动转换 客户端支持防止 XSRF 67k+ 颗星在 github github documentation for more

【讨论】:

我不得不做一些挖掘来看看为什么它比请求更好,获取......【参考方案3】:

对于那些想要使用 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);
    );
  );

【讨论】:

【参考方案4】:

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

npm install request

npm install request-promise

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

【讨论】:

实际上,为了成功使用 firebase 函数,所有 npm installs 都需要使用 --save 标志来完成。只是要记住一些事情,以避免在部署时出现烦人的“找不到模块”错误。 @HirdayGupta since npm@5.0.0 (may 25, 2017), --save 默认添加【参考方案5】:

记得在functions文件夹中安装模块!

cd functions
npm i --save request

【讨论】:

以上是关于使用 firebase 云功能向非谷歌服务器发送 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

电子邮件链接在非谷歌电子邮件客户端上不起作用

向非联系人发送谷歌群聊邀请

使用firebase云功能在特定时间发送FCM通知[重复]

如何使用 Firebase 云功能发送自定义电子邮件

从一个信号触发的 Firebase 云功能发送 voip 推送通知

在云功能 Firebase 中使用 SendGrid 发送交易电子邮件