簡體   English   中英

自定義 Object 用於 Node.js 中的 Cloud Firestore 在快照中運行。數據不是 function 錯誤

[英]Custom Object for Cloud Firestore in Node.js runs in snapshot.data is not a function error

我正在開發一個 web 應用程序,它接收來自 Node.js 服務器的通知。 我使用 Firebase Cloud Firestore 作為數據庫。 兩種代碼都在同一個 js 文件中,並且我已經正確初始化了我的數據庫和 Firebase 管理員(其他操作有效)。 我想將從數據庫中提取的數據保存在自定義 object 中:

// define logentry for user
class LogEntryUser {
  constructor(token, email){
    this.token = token;
    this.email = email;
  }
  getToken(){
    return this.token;
  }
  getEmail(){
    return this.email;
  }
}

// Firebase data converter
logConverterUser = {
  toFirestore: function(logentryuser){
    return {
      token: logentryuser.token,
      email: logentryuser.email
    }
  },
  fromFirestore: function(snapshot, options){
    const data = snapshot.data(options);
    return new LogEntryUser(data.token, data.email)
  }
}

以下是從 Cloud Firestore 讀取數據的代碼:

db.collection("Users").get().then(function(querySnapshot){
      querySnapshot.forEach((doc) => {
        db.collection("Users").doc(doc.id).withConverter(logConverterUser).get().then(function(snapshot){
          // convert to log object and read token
          logentryuser = snapshot.data();
          var registrationToken = logentryuser.getToken();
        });
      });
    });

運行此腳本會出錯:

(node:1648) UnhandledPromiseRejectionWarning: TypeError: snapshot.data is not a function at Object.fromFirestore.

我在另一個 js 項目中使用了相同的代碼,一切正常。 我不知道如何解決這個問題。 誰能幫我?

最美好的祝願

由於某種原因,withConverter 方法將實際數據而不是快照傳遞到 fromFirestore function。 如下更改 fromFirestore 為我修復了它。

// Firebase data converter
logConverterUser = {
  toFirestore: function(logentryuser){
    return {
      token: logentryuser.token,
      email: logentryuser.email
    }
  },
  fromFirestore: function(snapshot){
    const data = snapshot;
    return new LogEntryUser(data.token, data.email)
  }

在 Node.js 服務器中,您可以使用“普通”Javascript Object 來存儲快照。 以下代碼解決了我的問題:

db.collection("Users").get().then(function(querySnapshot){
  querySnapshot.forEach((doc) => {
    db.collection("Users").doc(doc.id).get().then(function(snapshot){
      var user = snapshot.data();
      var registrationToken = user.token;
    });
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM