Начало работы с облачными функциями для Firebase и Firestore - PullRequest
0 голосов
/ 08 мая 2019

Может кто-нибудь подсказать, как заставить Firestore работать с облачными функциями.

Я пытаюсь следовать документации здесь: https://firebase.google.com/docs/firestore/extend-with-functions

Использование firebase deploy --only functions:_onFirestoreWrite_notifications

Я получаю сообщение: HTTP Error: 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 Ответ

1 голос
/ 08 мая 2019

Обновление после комментария OP ниже: очевидно, использование подчеркивания в имени функции облака вызывает проблему .

С помощью триггера 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();

, поскольку в облачных функциях вы будете использовать Admin SDK для Node.js для взаимодействия сFirestore.

Для этого достаточно

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

, как объяснено здесь и здесь (вкладка Node.js).

Затем вы будете вызывать базу данных Firestore с admin.firestore(), например, admin.firestore().collection('_hello').add({...})


Кроме того, обратите внимание, что вы должны вернуть Обещания, возвращаемые асинхронными задачами.

Если я ссылаюсь на ваш исходный код (перед вашим редактированием)

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() )

Это важный момент и очень хорошо объяснено в трех видео о "Обещаниях JavaScript" из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...