使用 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 install
s 都需要使用 --save
标志来完成。只是要记住一些事情,以避免在部署时出现烦人的“找不到模块”错误。
@HirdayGupta since npm@5.0.0 (may 25, 2017), --save
默认添加【参考方案5】:
记得在functions文件夹中安装模块!
cd functions
npm i --save request
【讨论】:
以上是关于使用 firebase 云功能向非谷歌服务器发送 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章