Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取firebase数据库上新添加的子节点的事件_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript 获取firebase数据库上新添加的子节点的事件

Javascript 获取firebase数据库上新添加的子节点的事件,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我试图为引用路径上新添加的子节点获取触发器,并仅为新数据获取值。但是event.data.val返回该引用路径中的所有值 以下是我正在使用的云函数代码: exports.sendOfferNotification = functions.database.ref('/Users/{uid}/offers/New').onWrite(event => { // Only edit data when it is first created. // if (event.data

我试图为引用路径上新添加的子节点获取触发器,并仅为新数据获取值。但是
event.data.val
返回该引用路径中的所有值

以下是我正在使用的云函数代码:

exports.sendOfferNotification = functions.database.ref('/Users/{uid}/offers/New').onWrite(event => {
  // Only edit data when it is first created.
      // if (event.data.previous.exists()) {
      //   return;
      // }
      // Exit when the data is deleted.
      if (!event.data.exists()) {
        return;
      }
      // Grab the current value of what was written to the Realtime Database.
      const original = event.data.val();
      console.log('New offer', event.params.uid, original);

});
我尝试使用
onUpdate
而不是
onWrite
,但结果仍然相同。

您可以尝试以下方法:

exports.sendOfferNotification = 
functions.database.ref('/Users/{uid}/offers/New/{values}') //notice this change
.onWrite(event => {
      if (!event.data.exists()){return};
      const original = event.params.values; //notice this change
      console.log('New offer', event.params.uid, original);
});
你可以试试这个:

exports.sendOfferNotification = 
functions.database.ref('/Users/{uid}/offers/New/{values}') //notice this change
.onWrite(event => {
      if (!event.data.exists()){return};
      const original = event.params.values; //notice this change
      console.log('New offer', event.params.uid, original);
});

在New的嵌套级别上使用
onCreate()
解决了这个问题/

exports.sendNotificationForImportantOffers = functions.database.ref('/Users/{uid}/offers/New/Important/{values}').onCreate(event => {
  // Only edit data when it is first created.
      // if (event.data.previous.exists()) {
      //   return;
      // }
      // Exit when the data is deleted.
      if (!event.data.exists()) {
        return;
      }
      // Grab the current value of what was written to the Realtime Database.
      const original = event.data.val();
      console.log('New offer', event.params.uid, original);

});

最初,我尝试使用一个函数来侦听New/path下所有嵌套级别上的更改,但现在我必须使用
onCreate()
单独监视每个子级别的触发器,该命令只返回新添加的子级。

在New/path的嵌套级别上使用
onCreate()
解决了这个问题/

exports.sendNotificationForImportantOffers = functions.database.ref('/Users/{uid}/offers/New/Important/{values}').onCreate(event => {
  // Only edit data when it is first created.
      // if (event.data.previous.exists()) {
      //   return;
      // }
      // Exit when the data is deleted.
      if (!event.data.exists()) {
        return;
      }
      // Grab the current value of what was written to the Realtime Database.
      const original = event.data.val();
      console.log('New offer', event.params.uid, original);

});

最初,我尝试使用一个函数来侦听New/path下所有嵌套级别上的更改,但现在我必须使用
onCreate()
单独监视每个子级别的触发器,它只返回新添加的子级。

onWrite()数据库触发器将始终在您在ref()中指定的位置接收所有数据,只要该位置下的任何内容发生更改。是的,我同意,但onUpdate()的行为也相同。你知道如何只获取新添加的数据吗?例如,如果/New下已经有4个报价,并且添加了第5个报价时,我只想检索第5个报价的数据,那么每当该位置下的任何内容发生更改时,onWrite()数据库触发器将始终在您在ref()中指定的位置接收所有数据。是的,我同意,但onUpdate()的行为也相同。你知道如何只获取新添加的数据吗?例如,如果/New下已经有4个报价,当添加第5个报价时,我只想检索第5个报价的数据。您的{values}方法有帮助,但我还有一个子层,需要使用onCreate()而不是onWrite()。所以,我把我的答案贴在下面。这太完美了。如果您正在将数据推送到节点中,并且只想获得新节点的结果,那么请执行J.Doe正在执行的操作。。。您只需使用onWrite和{values},然后访问在const-original中找到的新添加的push记录即可。您对{values}的方法有所帮助,但我还有一个子层,需要使用onCreate()而不是onWrite()。所以,我把我的答案贴在下面。这太完美了。如果您正在将数据推送到节点中,并且只想获得新节点的结果,那么请执行J.Doe正在执行的操作。。。您只需使用onWrite和{values},然后访问在const-original中找到的新添加的push记录。