前置作業
首先,在 Firebase 創建一個應用程式,並且創建一個 Firestore 資料庫。如果是由後端程式存取資料庫,則可以選取「鎖定模式」,避免資源被濫用。
為了讓後端程式存取資料庫,需要創建一個憑證。點選「專案設定」、「服務帳戶」,然後點選「產生新的私密金鑰」,將憑證下載到專案目錄中。
建立專案
建立專案。
1 2
| mkdir firebase-firestore-node-example cd firebase-firestore-node-example
|
初始化專案。
安裝依賴套件。
1
| npm install firebase firebase-admin
|
修改 package.json
檔。
新增 .gitignore
檔。
1 2
| /node_modules serviceAccountKey.json
|
實作
新增 collection.js
檔。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| import { cert, initializeApp } from 'firebase-admin/app'; import { getFirestore } from 'firebase-admin/firestore'; import serviceAccount from './serviceAccountKey.json' assert { type: 'json' };
initializeApp({ credential: cert(serviceAccount), });
class Collection { constructor(collection) { const db = getFirestore(); this.collection = db.collection(collection); }
async getItem(path) { const snapshot = await this.collection.doc(path).get(); return snapshot.data(); }
async getItems() { const snapshot = await this.collection.get(); const items = snapshot.docs.map((doc) => ({ id: doc.id, ...doc.data(), })); return items; }
async addItem(value) { const docRef = await this.collection.add(value); return docRef.id; }
async updateItem(key, value) { return await this.collection.doc(key).set(value); }
async removeItem(key) { return await this.collection.doc(key).delete(); }
async getCount() { return (await this.collection.count().get()).data().count; } }
export default Collection;
|
建立 index.js
檔。
1 2 3 4 5 6 7 8 9 10 11 12
| import Collection from './collection.js';
const collection = new Collection('customers');
(async () => { console.log('addItem', await collection.addItem({ name: 'Alice' })); console.log('updateItem', await collection.updateItem('HdSVo6LxuBlizdgY3jTd', { name: 'Bob' })); console.log('getItem', await collection.getItem('0vBJGiONCUaU9JZpShAA')); console.log('getItems', await collection.getItems()); console.log('removeItem', await collection.removeItem('0vBJGiONCUaU9JZpShAA')); console.log('getCount:', await collection.getCount()); })();
|
程式碼
參考資料