Облачные функции Firebase помещают данные в массив при создании пользователя - PullRequest
0 голосов
/ 30 августа 2018
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const FieldValue = require('@google-cloud/firestore')
admin.initializeApp();


exports.collectEmail = functions.auth.user().onCreate((user) => {
    const email = user.email;
    admin.firestore().collection('all_emails').doc('emails').update({
        email: FieldValue.arrayUnion(email)
  }) 
})

Я все еще получаю сообщение об ошибке: FieldValue.arrayUnion не является функцией

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы используете идентификатор firebase без предварительного определения. Это недействительно.

Похоже, вы скопировали код из SDK Firestore JavaScript и вставили его в место, где вы используете Fireabse Admin SDK для работы с Firestore. Это разные SDK. Вы должны использовать Admin SDK только для кода на стороне сервера, включая облачные функции.

Если вы хотите использовать FieldValue из SDK администратора , вам нужно обратиться к нему из импортированного вами SDK администратора:

admin.firestore.FieldValue

К сожалению, это не будет работать (пока), потому что административный SDK еще не использует версию SDK узла Firestore, которая поддерживает arrayUnion, то есть 0.16.x.

Так что вам нужно будет выполнить обновление до последнего пакета @google-cloud/firestore (который включает Admin SDK)

npm install @google-cloud/firestore@latest

Затем импортируйте его в свой код:

import { FieldValue } from '@google-cloud/firestore'

Затем используйте только что импортированную версию в вашем коде:

email: FieldValue.arrayUnion(email)
0 голосов
/ 30 августа 2018

Вы должны проверить в своем файле package.json, что у вас установлена ​​последняя версия "firebase-admin", то есть версия 6.0.0 (на момент написания этого ответа).

См. Примечания к выпуску Admin Node.js SDK здесь , которые указывают, что с этой версией произошло обновление до клиента Cloud Firestore, который содержит API FieldValue.arrayUnion() и FieldValue.arrayRemove().

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