iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 25
0
Modern Web

Next.js + 各種套件組合系列 第 25

Next.js & Firebase Database (一)

  • 分享至 

  • xImage
  •  

介紹

Firebase 強調是realtime的 Database 所以常會被拿來當作導航定位 或是聊天室即時通訊的Database這次來介紹一下 Web API 開發的步驟

先去 Firebase的 console 先拿到 api Key與設定檔案
https://console.firebase.google.com/

  var config = {
    apiKey: "apiKey",
    authDomain: "projectId.firebaseapp.com",
    databaseURL: "https://databaseName.firebaseio.com",
    storageBucket: "bucket.appspot.com"
  };
  firebase.initializeApp(config);
  var database = firebase.database();

記得 Next.js 中安裝一下 firebase 套件,因為如果要做到SSR記得也要安裝 firebase-admin套件並下載 Server Part的金鑰

因為 Firebase是使用 JSON節點方式 存放資料結構,接下建構一個資料結構,以官方為例

{
  "users": {
    "alovelace": {
      "name": "Ada Lovelace",
      "contacts": { "ghopper": true },
    },
    "ghopper": { ... },
    "eclarke": { ... }
  }
}

在設計這類的節點時候,官方說可以有32層的節點結構但是希望是以平坦化開發會比較好,因為當允許訪問節點的時候表示該節點以下的資訊都可以被訪問到。

設計上也應該要避免巢狀結構

{
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "messages": {
        "m1": { "sender": "ghopper", "message": "Relay malfunction found. Cause: moth." },
        "m2": { ... },
        // 如果這邊的訊息太多,表示當拿到one的時候或是two的時候就要把全部的東西載下來
      }
    },
    "two": { ... }
  }
}

如果以這個例子,比較好的設計是先幫所有的成員定義好,在定義一個 messages來存放聊天室的資料, member的聊天記錄這樣就不會有一次載入太多資訊的問題

{
  "chats": {
    "one": {
      "title": "Historical Tech Pioneers",
      "lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
      "timestamp": 1459361875666
    },
    "two": { ... },
    "three": { ... }
  },
 
  "members": {
     "one": {
      "ghopper": true,
      "alovelace": true,
      "eclarke": true
    },
    "two": { ... },
    "three": { ... }
  },

  "messages": {
    "one": {
      "m1": {
        "name": "eclarke",
        "message": "The relay seems to be malfunctioning.",
        "timestamp": 1459361875337
      },
      "m2": { ... },
      "m3": { ... }
    },
    "two": { ... },
    "three": { ... }
  }
}

設計的可以有scale

以下這個Data結構 ,雖然可以快速查詢到user底下的 alovelace 屬於哪些groups,但是當
groups被改名字的時候,其實是不會連動的這樣的設計很不好這時候把groups底下使用id使用index查詢會更好

/users/$uid/groups/$group_id

{
"users": {
"alovelace": {
"name": "Ada Lovelace",
"groups": {
"techpioneers": true,
"womentechmakers": true
}
},
...
},
"groups": {
"techpioneers": {
"name": "Historical Tech Pioneers",
"members": {
"alovelace": true,
"ghopper": true,
"eclarke": true
}
},
...
}
}

總結

Firebase是一個 real database 在各種運用 iot,聊天室,推播 等等都常會看到來幫Next.js也 裝備一下吧

https://firebase.google.com/docs/database/web/start


上一篇
Next.js & StoryBook (三)
下一篇
Next.js & Firebase Database (二)
系列文
Next.js + 各種套件組合30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言