从Node.js调用Firebase云函数

5

我想从另一个Node.js服务器或仅仅是一个Node.js脚本中调用Firebase的云函数。

我的Firebase函数是一个onCall函数。

我正在使用https://www.npmjs.com/package/firebase-admin来与Firebase进行交互,但它似乎没有调用云函数的方法...

还有其他的方法可以实现吗?比如使用HTTP请求?


2
云函数是否处理HTTP请求?如果是这种情况,您可以像调用任何API端点一样调用它,因为它具有一个url。 - Dominic
我可以那样做,但我真的不想这样做!我更喜欢通过他们的API或其他方式调用它,而不是通过http。 - exilonX
3个回答

3

如果你想从服务器端调用可调用函数,你需要遵循其协议文档以确保请求有效。

使用常规的HTTP类型函数可能更容易。通过在另一个普通JavaScript函数中共享公共代码,应该可以轻松地与可调用函数共享其逻辑。


我不太理解使用函数时的安全性方面。https.onRequest((req, res) => {})它不需要任何身份验证,我可以执行任何Firebase查询吗?我有什么遗漏吗? - exilonX
“我可以制作任何Firebase查询吗?” - 我不是很明白你在这里问什么。你在编码方面有问题吗? - Doug Stevenson
不是这个问题,我已经解决了。我的问题是我正在进行一个未经身份验证的请求,但请求仍然从Firebase返回数据! - exilonX
如果您正在使用普通的HTTP类型触发器,则必须实现自己的授权形式。 - Doug Stevenson

1
要在本地调用函数,请运行firebase emulators:start --only function,在函数列表http://localhost:4001/functions中检查要调用的函数名称。
  await fetch('<HTTP-LOCAL-URL-YOU-PICKED-FROM-THE-LIST>', {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({data:{ /* YOUR JSON COMES HERE */ }})
  });

远程调用
  await fetch('http://us-central1-<MY_PROJECT_NAME>.cloudfunctions.net/<MY_FUNCTION_NAME>', {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({data:{ /* YOUR JSON COMES HERE */ }})
  });

它将分别对您的后端本地和远程进行ping测试。

1

简而言之:您需要触发http事件。
目前,Firebase支持两种调用选项。

如果您阅读文档这里这里,就必须有一些触发器。
而Firebase接受http请求。
即使您使用示例一中的移动应用程序,在幕后,Firebase SDK也会发出http请求。

另一个选项是计划的调用,但根据评论,这不是您要寻找的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接