[英]Uncaught (in promise) TypeError: snapshot.data is not a function when trying to retrieve documents from Firebase Firestore
[英]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.