【问题标题】:Angular Firebase Error ---- Function DocumentReference.set() called with invalid data. Unsupported field value: undefined (found in field lastname)Angular Firebase 错误 ---- 使用无效数据调用的函数 DocumentReference.set()。不支持的字段值:未定义(在字段姓氏中找到)
【发布时间】:2020-03-21 09:53:01
【问题描述】:

如果我注释掉“lastname: this.newUser.lastName”,错误就会消失(从底部向上 9 行)

我真的被难住了。我查看了所有拼写等,似乎仍然可以找出发生这种情况的原因。

话虽如此,有没有更简单的方法来调试角类型脚本?我对这个世界还很陌生。

    import { Injectable } from '@angular/core';
    import { AngularFireAuth } from '@angular/fire/auth';
    import { AngularFirestore } from '@angular/fire/firestore';
    import { Router } from '@angular/router';
    import { ThrowStmt } from '@angular/compiler';
    import { BehaviorSubject } from 'rxjs';

    @Injectable({
      providedIn: 'root'
    })
    export class AuthService {

      private eventAuthError = new BehaviorSubject<string>("");
      eventAuthError$ = this.eventAuthError.asObservable();

      newUser: any;

      constructor(
       private afAuth: AngularFireAuth,
       private db: AngularFirestore,
       private router: Router) { }

      getUserState() {
        return this.afAuth.authState;
      }

login( email: string, password: string) {
 this.afAuth.auth.signInWithEmailAndPassword(email, password)
  .catch(error => {
    this.eventAuthError.next(error);
  })
  .then(userCredential => {
    if(userCredential) {
      this.router.navigate(['/home']);
    }
  })
}

createUser(user) {
console.log(user);
this.afAuth.auth.createUserWithEmailAndPassword( user.email, user.password)
  .then( userCredential => {
    this.newUser = user;
    console.log(userCredential);
    userCredential.user.updateProfile( {
      displayName: user.firstName + ' ' + user.lastName
    });

    this.insertUserData(userCredential)
      .then(() => {
        this.router.navigate(['/home']);
      });
  })
  .catch( error => {
    this.eventAuthError.next(error);
  });
 }

 insertUserData(userCredential: firebase.auth.UserCredential) {
  return this.db.doc(`Users/${userCredential.user.uid}`).set({
   email: this.newUser.email,
   firstname: this.newUser.firstName,
   lastname: this.newUser.lastName,
   role: 'network user'
   })
  }

  logout() {
    return this.afAuth.auth.signOut();
  }
}

【问题讨论】:

    标签: javascript angular firebase google-cloud-firestore


    【解决方案1】:

    该错误消息告诉您,您将 JavaScript 值 undefined 作为文档中名为“lastname”的属性传递。 Firestore 不接受未定义的值。您将不得不为 lastname 分配一些其他值。如果您打算始终有一个姓氏值,则应在尝试将其写入文档字段之前检查其有效性,或者将其完全排除在文档之外。

    【讨论】:

    • 啊。好的。我没有注意表单字段中的区分大小写。特别是输入中的“id”……叹息……感谢同行评审。
    猜你喜欢
    • 2018-08-11
    • 2019-04-25
    • 2019-12-20
    • 1970-01-01
    • 2020-04-24
    • 2019-03-08
    • 2020-06-13
    • 2020-06-29
    • 2019-12-07
    相关资源
    最近更新 更多