NCMB (ニフクラ mobile backend) のGETメソッドのサンプルを、Firebase FunctionsとFirebase Firestoreを使って実装する方法について解説しています。
概要
NCMBのGETメソッドのサンプルをFirebaseで再現。
Firestoreの Item
コレクションからデータを取得し、ランダムに選択されたレコードを返す。
Firebase Functionsのコード
get_random
関数を定義して、Firestoreから Item
コレクションのデータを取得。
取得したデータの中からランダムに1つのドキュメントを選択し、そのデータを返す。
コード例:
const get_random = functions.https.onCall(async (data, context) => {
const db = admin.firestore();
const ref = db.collection('Item');
const snapshot = await ref.get();
if (snapshot.empty) {
return null;
}
const docIds = snapshot.docs.map(doc => doc.id);
const randomIndex = Math.floor(Math.random() * docIds.length);
const randomDocId = docIds[randomIndex];
const docSnapshot = await ref.doc(randomDocId).get();
return docSnapshot.data();
});
exports.get_random = get_random;
アプリ側のコード
Firebase Functionsで定義した get_random
関数をアプリから呼び出す。
結果をコンソールに表示し、エラーがあればハンドリングする。
コード例:
const get_random = httpsCallable(functions, 'get_random');
get_random().then((result) => {
// 結果の表示
log(result.data);
}).catch((error) => {
// エラーのハンドリング
log('Error');
log(error);
});
解説
result.data
は単純なJSONオブジェクトです。NCMBと異なり、ドキュメントのIDは含まれていません。ドキュメントのIDを結果に含めたい場合は、サーバー側のコードを以下のように変更する必要があります:
return {
id: randomDocId,
...docSnapshot.data()
};
Firebase Functionsの error
オブジェクトは、NCMBのものと異なるので注意が必要です。