【问题标题】:Firebase function deploys, but no logs produced & no response to trigger by onCreate() eventFirebase 功能已部署,但未生成日志且未响应 onCreate() 事件触发
【发布时间】:2019-06-19 13:40:53
【问题描述】:

我正在尝试创建一个 Firebase 云函数,它会在我的 react 本机应用程序的提要上侦听新帖子,然后将帖子通知发送给所有用户。我决定从小处着手,首先从基本层面了解 Firebase Cloud Functions。

按照实时数据库触发器的 firebase 文档,我尝试创建如下代码所示的函数。我相信该功能可以很好地部署到我的数据库,因为这是在命令提示符下输出的:

另外,我的 firebase 项目似乎也接收和存储该功能: 但是,当我返回我的数据库并在指定路径上创建一个新节点时,什么也没有发生。此外,我检查了功能选项卡中的“日志”,没有任何内容。

任何帮助将不胜感激...谢谢!

编辑 1 这是我的数据库的屏幕截图:

编辑 2 尝试包含管理 SDK(如下所示)但没有任何变化。

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');

admin.initializeApp();

exports.sendPushNotifications = functions.database.ref('/{organization}/posts/')
    .onCreate((snapshot, context) => {
      const post = snapshot.val();
      console.log('Uppercasing', context.params.organization, post);
      const uppercasePost = post.toUpperCase();
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to the Firebase Realtime Database.
      // Setting an "uppercase" sibling in the Realtime Database returns a Promise.
      return snapshot.ref.parent.child('cloudFunctionTest').set(uppercasePost);
    });

【问题讨论】:

  • 你能显示你的数据库的打印屏幕吗?
  • @RenaudTarnec 已编辑!
  • @RenaudTarnec 不是 OP,但我看到 OP 没有初始化 Admin SDK...并且step #3 of the Getting Started 建议 Admin SDK 是访问数据库所必需的...我可以看到这意味着需要单独读取/写入数据...但这是否意味着即使是 DB 触发器也需要它?
  • @JeremyW 我已经尝试了有和没有这些步骤,但不幸的是,没有改变。我将编辑上面的代码以包含这些步骤
  • @RayhanMemon 您是否创建了一个新节点?即什么是“指定路径”?在“帖子”下?在“组织”下?还是在“组织”下(带有 S)?你必须非常精确。

标签: firebase react-native firebase-realtime-database google-cloud-functions


【解决方案1】:

您可能没有在正确的路径下创建“帖子”。

事实上,用你的代码

exports.sendPushNotifications = functions.database.ref('/{organization}/posts/')
    .onCreate((snapshot, context) => {})

Cloud Function 将针对以下任何节点触发

ksigapp   // <- Root of your database
    - abcd  //<- This corresponds to {organization} in your code
        - posts: "lowercase"
    - efgh  // <- This corresponds to {organization} in your code
        - posts: "whatever"
    - IUUY7676676fgfgfg7  //<- This corresponds to {organization} in your code
        - posts: "lowercase2"

....

其次,posts 的值必须是字符串,不能是对象,因为post.toUpperCase(); 会产生错误(不能将此方法应用于对象)。

也就是说,下面会产生错误:

ksigapp   // <- Root of your database
    - abcd  
        - posts
           - postId
              - author: "John"
              - subject: "Lorem ipsus"

所以您很可能必须重新考虑您的 Cloud Function 路径

您可以学习以下官方 Firebase 示例:https://github.com/firebase/functions-samples/tree/master#rtdb

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 2022-09-27
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2021-04-18
    • 2018-01-27
    相关资源
    最近更新 更多