状況
タイトルの通り、Firebaseを利用しておりますが、
ローカルで実行した場合と、ホスティング後で挙動が異なります。
書いてるコード
Firestoreからデータをfetchするために、
Collectionクラスをまず作りました。
実際のCollection (下の例では testsコレクション)を操作する場合、
Testsクラスを作成し、Collectionクラスを継承して、データを操作します。
typescript
1class Collection { 2 collection: firebase.CollectionReference; 3 4 constructor() { 5 // クラス名の先頭を小文字にする 6 const collectionName = _.lowerFirst(this.constructor.name); 7 this.collection = firestore().collection(collectionName); 8 } 9 10 public fetchAll = async () => { 11 const snapshot = await this.collection.get(); 12 ... 13 return documents; 14 } 15} 16 17// testsコレクションのデータを操作 18class Tests extends Collection{}
どのように動作が異なるのか?
上記のコードをもとに、
Typescript
1await new Tests().fetchAll()
を行うと、
ローカルでは、testsコレクションのデータが取得できますが、
ホスティング後は、空オブジェクトになります。
原因を探ってみると、上述のコードのコンストラクタが悪さをしております。
具体的には、
typescript
1 2class Collection { 3 collection: firebase.CollectionReference; 4 5 constructor() { 6 const collectionName = _.lowerFirst(this.constructor.name); 7 this.collection = firestore().collection(collectionName); 8} 9 ...
の this.constructor.name の値が異なります。
ローカル実行では、 "Tests"とクラス名が取れるのですが、
ホスティング後は、 なぜか "n" という値が出力されます。。。
根本的な原因が分からないので、
consturctorの引数にコレクション名等を取る形に変えるか迷っております。
なぜこのような状況になるのか、
アドバイスをいただけたら幸いです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー