适用于Firebase的云功能:如何引用刚刚推送的列表中的键

时间:2017-06-18 12:38:07

标签: javascript firebase google-cloud-functions

我的问题基本上是在你的云功能中做什么,如果你想引用客户端调用push()时生成的密钥。

/providerApps/{UID}/是我的约会节点列表的路径,因此每个约会节点都在/providerApps/{UID}/someKey

我需要“列表中的新项目”,即使用push()添加的项目,所以我认为我可以订购密钥并简单地获取最后一项,但这不起作用:

// (Try to) Listen for new appointments at /providerApps/{pUID}
// and store the appointment at at /clientApps/{cUID}
// cUID is in the new appointment node
exports.storeNewAppForClient = functions.database.ref("/providerApps/{UID}").onWrite(event => {

      // Exit when the data is deleted.
      if (!event.data.exists()) {
        console.log("deletion -> exiting");
        return;
      }

      const pUID = event.params.UID;
      const params = event.params;
      console.log("params: ", params);

      const firstAppVal = event.data.ref.orderByKey().limitToLast(1).val();
      // TypeError: event.data.ref.orderByKey(...).limitToLast(...).val is not a function 

      const date = firstAppVal["dateStr"];
      const cUID = firstAppVal["clientUID"];

    return event.data.ref.root.child("clientApps").child(cUID).child(date).set(pUID);
});

我想我可以在客户端使用push()。getKey()并允许提供程序写入clientApps节点,但这似乎不太优雅。

有关如何使用云功能执行此操作的任何想法?

举个例子,我的数据结构如下所示:

there are provider and their clients who make appointments

干杯

1 个答案:

答案 0 :(得分:4)

将您的触发位置更改为新创建的约会,而不是约会列表。然后您可以直接访问约会数据:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="testtable">
</th>
<tr>testcolumn</tr>
</th>
<tr><td>
<input type="checkbox"  class="your" value="yourCheckBoxVal">
<input type="button"  class="deleteButton" style="display:none">		
</td></tr>
<tr><td>
<input type="checkbox"  class="your" value="yourCheckBoxVal">
<input type="button"  class="deleteButton" style="display:none">		
</td></tr>
</td></tr>
<tr><td>
<input type="checkbox"  class="your" value="yourCheckBoxVal">
<input type="button"  class="deleteButton" style="display:none">		
</td></tr>

</table>

(根据弗兰克的评论更新)