【Firebase】一個能即時更新的網頁 - Hosting

相信大家都有聽過firebase的大名,它是一個資料庫,但是其實它其它也有包含網頁的部分,就叫做Hosting,跟它的Database做結合,可以更簡單的做一個有資料庫的動態網頁。安裝firebase-tools跟登入的部分就不多說了,詳情可以參考之前的網頁。我們就開始吧。

Firebase Hosting

Hosting

  • 首先呢,這裡還是使用博客來的書籍資料來當DB使用,然後看看Hosting到底長的是什麼樣子?
{
  "eBook": {
    "9789861365404": {
      "name": "勇氣圖鑑:受挫、失敗都是成長的養分",
      "url": "https://www.books.com.tw/products/0010831766",
      "prices": [320, 253, 202],
      "order": 1
    },
    "9789578640856": {
      "name": "不插電 小學生基礎程式邏輯訓練繪本全套四冊",
      "url": "https://www.books.com.tw/products/0010818767",
      "prices": [1440, 1080],
      "order": 3
    },
    "9789869744560": {
      "name": "關於工作的9大謊言",
      "url": "https://www.books.com.tw/products/0010832091",
      "prices": [420, 332],
      "order": 2
    },
    "9789570853551": {
      "name": "全圖解!AI知識一本通:用故事讓你三小時輕鬆搞懂人工智慧",
      "url": "https://www.books.com.tw/products/0010830584",
      "prices": [280, 221],
      "order": 4
    },
    "9789863774938": {
      "name": "星座決定我愛你:用占星和塔羅幫你找到真命天子or女",
      "url": "https://www.books.com.tw/products/0010825318",
      "prices": [320, 253, 177],
      "order": 5
    }
  }
}

建立hosting

  • 登入firebase-cli之後,接著使用指令建立一個hosting的資料夾,選擇剛剛建立好的專案名稱。
firebase init hosting

建立Web應用程式

  • 在建立的過程式會看到一段js文字,裡面有一個「firebaseConfig」的變數,這個內容相當的重要,有了這段文字,才可以從外部的html連到firebase。
var firebaseConfig = {
  apiKey: "AIzaSyCXLgMifVyVgnooooo--YCYEE5pYooooo",
  authDomain: "ebook-ooooo.firebaseapp.com",
  databaseURL: "https://ebook-ooooo.firebaseio.com",
  projectId: "ebook-ooooo",
  storageBucket: "ebook-ooooo.appspot.com",
  messagingSenderId: "824229ooooo",
  appId: "1:824229ooooo:web:0fa84260b5ed04b8ooooo"
}

firebase.initializeApp(firebaseConfig)

連接firebase

  • 這裡就來先試試看連線是否是正常的。
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Firebase Hosting 測試</title>
  <link rel="stylesheet" type="text/css" href="css/table.css" />
  <script src="https://www.gstatic.com/firebasejs/7.5.0/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.5.0/firebase-auth.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.5.0/firebase-database.js"></script>

  <!--  使用firebase的設定 (類似帳密)  -->
  <script src="js/config.js"></script>

  <script>
  const path = '/'
  const type = 'value'
  firebase.database().ref(path).on(type, snapshot => {
      console.log(snapshot.val())
  })
  </script>
</head>

<body>
</body>

</html>

撰寫主要部分

  • 這裡主要是寫api.js的部分,將database的資料放到網頁上面,也能及時的更新。
const tableID = 'books'
const path = '/eBook'
const type = 'value'

firebase.database().ref(path).on(type, snapshot => {

    const bookInfos = snapshot.val()

    let tableInfo = '<tr><th>ISBN</th><th>書名</th></tr>'

    Object.keys(bookInfos).map((isbn) => {
        const info = bookInfos[isbn]
        tableInfo += `<tr><td>${isbn}</td><td>${info.name}</td></tr>`
    })

    document.getElementById(tableID).innerHTML = tableInfo
})

上傳到hosting

  • 利用firebase-cli把網頁上傳,就可以有一個真實的網頁了。上傳之後其實並不需要config.js的驗證部分,因為能上傳就表示帳號密碼是正確的。
firebase deploy

範例程式碼下載

後記

  • 其實Firebase整合的相當好,不管是資料庫、網頁、推播…等,只要是Web相關的,通通一次到位,簡單易學。