Ошибка Reference.set: первый аргумент содержит неопределенный - PullRequest
0 голосов
/ 17 апреля 2019

Я создал функцию firebase, которая прослушивает событие onCreate, однако DocumentSnapshot.data () возвращает пустой.

Код функции:

exports.createClientAccount = functions.firestore
  .document('/userProfile/{userId}/clientList/{clientId}')
  .onCreate(async (snap, context) => {
    console.log('****snap.data(): ', snap.data()); //Showing Empty from the console.
    return admin
      .auth()
      .createUser({
        uid: context.params.clientId,
        email: snap.data().email,
        password: '123456789',
        displayName: snap.data().fullName,
      })
      .then(userRecord => {
        return admin
          .database()
          .ref(`/userProfile/${userRecord.uid}`)
          .set({
            fullName: userRecord.displayName, //ERROR here: Reference.set failed: First argument contains undefined
            email: userRecord.email,
            coachId: context.params.userId,
            admin: false,
            startingWeight: snap.data().startingWeight,
          });
      })
      .catch(error => {
        console.error('****Error creating new user',error);
      });
  });

Документ созданв базе данных firebase под

/userProfile/{userId}/clientList/{clientId}

clientId-документом, созданным в базе данных

Согласно документации, onCreate прослушивает, когда создается новый документ, и возвращает снимокданные, созданные через интерфейс DocumentSnapshot.Тем не менее, я проверил из консоли, что snap.data () пуст.Я не понимаю, почему он пуст, если документ успешно создан в базе данных.

изображение, показывающее ошибку, возвращаемую функциями при создании userProfile

Из кода функции return admin.auth.createUser({}) создает пользователя как анонимного из-за snap.data ().адрес электронной почты не определен, но он должен создавать не анонимного пользователя.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

В итоге проблема заключалась в том, что когда я создавал документ с помощью add ({}), я не включал поля в инструкцию.Это функция, которая создает клиентский документ, и теперь функция запускается правильно.

  async clientCreate(
    fullName: string,
    email: string,
    startingWeight: number
  ): Promise<any> {
    const newClientRef = await this.firestore
      .collection(`userProfile/${this.userId}/clientList/`)
      .add({
        fullName,
        email, 
        startingWeight: startingWeight * 1,
      });

    return newClientRef.update({
      id: newClientRef.id
    }); 
}

Я звонил this.firestore.collection(...).add({}) без полей, поэтому, когда это произошло, облачная функция сработала, и DocumentSnapshot.data() был пуст, что возвратило ошибку Reference.set.Облачная функция createClientAccount правильная.Спасибо.

0 голосов
/ 18 апреля 2019

Сначала попробуйте изменить document('/userProfile/{userId}/clientList/{clientId}') на document('userProfile/{userId}/clientList/{clientId}').

path не должно начинаться с /.

exports.createClientAccount = functions.firestore
  .document('userProfile/{userId}/clientList/{clientId}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...