适用于Firebase和Firestore的Cloud Functions入门

时间:2019-05-08 10:14:54

标签: firebase google-cloud-firestore google-cloud-functions

任何人都可以给我一些指导,让Firestore使用Cloud Functions。

我正在尝试遵循此处的文档:https://firebase.google.com/docs/firestore/extend-with-functions

使用firebase deploy --only functions:_onFirestoreWrite_notifications

我收到消息:HTTP错误:400,请求有错误

const functions = require('firebase-functions');
const admin = require('firebase-admin');

const Firestore = require('@google-cloud/firestore');
const firestore = new Firestore();

admin.initializeApp();

const db = admin.firestore();

exports._onFirestoreWrite_notifications = functions.firestore
  .document('_notifications')
  .onWrite((change, context) => {

  //..

  });

1 个答案:

答案 0 :(得分:1)

根据以下OP的评论进行更新:显然,在Cloud Function名称中使用下划线会引起问题

使用onWrite()触发器,您将为特定文档的任何更改触发一个事件。 Firestore中的文档存储在集合中,因此您需要将文档的完整路径传递给document()方法,如下所示:

exports.onFirestoreWriteNotifications = functions.firestore
  .document('collection/_notifications')  //Note the addition of the collection
  .onWrite()

此外,请注意,您无需这样做

const Firestore = require('@google-cloud/firestore');
const firestore = new Firestore();

因为在Cloud Functions中,您将使用Admin SDK for Node.js与Firestore进行交互。

这样做

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

足以说明herehere(Node.js选项卡)。

然后,您将使用admin.firestore()调用Firestore数据库,例如admin.firestore().collection('_hello').add({...})


此外,请注意,您必须返回异步任务返回的Promises。

(如果在编辑之前)我参考了您的初始代码

exports._onFirestoreWrite_notifications = functions.firestore
  .document('collection/_notifications')
  .onWrite((change, context) => {

    db.firestore//.collection('_hello').add({
      text: "itworks",
      from: "onWrite"
    });

  });

您需要做

return admin.firestore().collection('_hello').add({
  text: "itworks",
  from: "onWrite"
});
//!!! Note the return (and the use of admin.firestore() )

这很重要,并且在Firebase视频系列的三个有关“ JavaScript承诺”的视频中得到了很好的解释:https://firebase.google.com/docs/functions/video-series/