【问题标题】:Invalid document reference error无效的文档参考错误
【发布时间】:2018-01-11 19:48:55
【问题描述】:

我有这个错误:

core.js:1440 ERROR Error: Uncaught (in promise): FirebaseError:     
[code=invalid-argument]: Invalid document reference. 
Document references must have an even number of segments, but users has 1

FirebaseError: Invalid document reference. 
Document references must have an even number of segments, but users has 1

at new FirestoreError (error.js:149)
at Function.DocumentReference.forPath (database.js:436)
at Firestore.doc (database.js:245)
at AngularFirestore.doc (firestore.js:28)
at new Firebase (firebase.service.ts:25)
at _createClass (core.js:10877)
at _createProviderInstance$1 (core.js:10847)
at resolveNgModuleDep (core.js:10832)
at NgModuleRef_.get (core.js:12069)
at resolveDep (core.js:12559)
at new FirestoreError (error.js:149)
at Function.DocumentReference.forPath (database.js:436)
at Firestore.doc (database.js:245)
at AngularFirestore.doc (firestore.js:28)
at new Firebase (firebase.service.ts:25)
at _createClass (core.js:10877)
at _createProviderInstance$1 (core.js:10847)
at resolveNgModuleDep (core.js:10832)
at NgModuleRef_.get (core.js:12069)
at resolveDep (core.js:12559)
at resolvePromise (zone.js:821)
at resolvePromise (zone.js:785)
at eval (zone.js:870)
at ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:4724)
at ZoneDelegate.invokeTask (zone.js:420)
at Zone.runTask (zone.js:188)
at drainMicroTaskQueue (zone.js:594)
at <anonymous>

这是我的函数:在 firebase.service.ts

  async login() {
    let u = await this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider())
    console.log(u);
    return this.getUserData(u.user.email);
  }

  public updateUser(UserName,phone)
  { 
    this.userRef.doc(this.getEmail()).set({
     UserName:UserName,
     phone:phone, 
    });

    this.router.navigate(["home"]);
  }

在 login.component.ts 中:

login(){

  this.firebaseService.updateUser(this.UserName,this.phone);

}

在login.component.html中:


        <input type="text" [(ngModel)]="UserName" onsubmit="myFunction()" name="UserName"  pattern="[A-Za-z]{}" placeholder="UserName">
        <div id="UserName" style="color:transparent; display:none">
          The user name is required.
        </div>

        <input type="number" [(ngModel)]="phone" name="phone" placeholder="Phone number">
        <div id="PelephoneNumber" style="color:transparent; display:none">
            The phone is required.
          </div>
        <button (click)=login() type="Submit" class="Submit" id="login-button">Login</button>

    </form>
    </div>

有什么帮助吗?

【问题讨论】:

    标签: angular firebase google-cloud-firestore


    【解决方案1】:

    我认为您需要在这里分享更多代码。我们不知道 this.userRef 设置为... 不假设您设置正确,我将其写为:

    this.fireStore.collection('users').doc(this.getUserEmail()).update({name:'John Doe'});

    1.) 请注意,我使用的是 update,而不是 set。 Set 将使用您传递的任何新数据完全覆盖文档。我假设您想使用更新,因为您的函数名称称为“updateUser()”

    2.) 我还假设 this.getUserEmail() 返回一个 string。 .doc() 方法需要一个与您尝试更新的文档的 ID 匹配的字符串。

    如果您提供更多服务代码,我可能会提供更多帮助...

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 2022-01-15
      • 2018-12-31
      • 2020-02-16
      • 2020-11-03
      • 2014-10-13
      • 2019-04-17
      • 2020-06-26
      • 2018-11-12
      相关资源
      最近更新 更多