【问题标题】:Firebase cloud functions make a POST request [duplicate]Firebase云功能发出POST请求[重复]
【发布时间】:2017-10-10 14:30:30
【问题描述】:

我正在使用 firebase 数据库,并且我想要一个云函数(触发器)与我拥有的 REST node.js Web 服务进行通信。

触发器已创建,但现在我希望云函数调用我在托管计算机中的外部 Web 服务。

我导入了 jQuery。但它说 $.post 不是函数。我认为这是因为以某种方式安装了超薄版本(不是这种情况)。然后我尝试使用 XMLHttpRequest 直接在 JavaScript 中执行此操作,该函数也表示

ReferenceError: XMLHttpRequest 未定义 在 /user_code/index.js:91:19 在 process._tickDomainCallback (internal/process/next_tick.js:129:7)

您知道如何在 firebase 云函数上发出 POST 请求吗?

【问题讨论】:

  • 我一直在尝试用同样的错误做同样的事情。也尝试过使用 npm 包:request、request-promise、superagent。使用这些总是错误 getaddrinfo ENOTFOUND
  • 刚刚发现 getaddrinfo ENOTFOUND 正在发生,因为我正在从非付费帐户进行测试。如果在付费帐户上,请求和请求承诺工作 - 在 blaze 计划中
  • 是的,我也遇到了同样的情况,显然免费版只允许出站呼叫谷歌服务。

标签: javascript jquery firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

Firebase Cloud Functions 是一个 Node.js 环境。但是 jQuery 是一个客户端 javascript 库。有一些服务器端 jQuery 构建(Cheerio、nodeQuery),请参见此处:Can I use jQuery with Node.js?

但我愿意。 . .

尝试使用节点模块 xmlhttprequest。它让您可以像在客户端 JavaScript 中那样编写原始请求。您需要在 package.json 文件中使用该依赖项,即:

"dependencies": {
    "xmlhttprequest": "^1.8.0"
}

然后在你的函数中:

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

var request = new XMLHttpRequest();
request.addEventListener('load', doSomethingWithDataFromResponse);
request.open("GET","http://urlToMyServer");  
request.send();

function doSomethingWithDataFromResponse() {
  var data = this.responseText;
  //etc.
}

对于 POST 类似:

var request = new XMLHttpRequest();
var params = "word=foo"; //or stringify some JSON
request.addEventListener('load', doSomethingWithDataFromResponse);
request.open("POST","http://urlToMyServer"); 
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // or application/json etc.
request.send(params);

这就是我最近处理从节点服务器到其他第三方服务器的请求的方式。我还没有机会尝试使用 Firebase,但所有文档似乎都表明它应该可以工作。

【讨论】:

  • 即使在本地主机中我也可以使用并将 JQuery 导入 node.js,在谷歌云功能中我无法导入它们,它总是说包没有定义,请求包是与我的解决方案一起正常工作的那个
【解决方案2】:

您必须使用付费的 Firebase 计划(可能是 Blaze)才能发布到外部网站。 https://stackoverflow.com/a/42775841/6480950

可以使用 npm 模块请求和请求承诺。

基本测试: https://stackoverflow.com/a/43645498/6480950

【讨论】:

  • 非常感谢 :) 这是文档中的一个注释,因为只有在检查了我理解的帐单价格后才能说明:D 谢谢
猜你喜欢
  • 2019-06-13
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2018-12-28
相关资源
最近更新 更多