Skip to main content

ทดสอบระหว่าง Emulator และ Server

มาทดลองใช้ Firebase ผ่าน Firestore กัน​

อย่างที่เล่าไป Firestore คือ Database ดังนั้นมันจึงสามารถเก็บข้อมูลเอาไว้ได้

เราจะ มาลองเปลี่ยน localstorage (ที่ดึงข้อมูล product อยู่) เป็น Firestore กัน

สร้าง config ที่ Firebase กันก่อน​

  • step แรก ให้ไปที่ "Project Overview" ของ Firebase แล้วกด "+ Add app"

workshop-01

  • จากนั้นให้เลือกเป็น "Web"

workshop-02

  • จากนั้นจะเจอให้ใส่ชื่อ Nickname app ให้ใส่ชื่ออะไรก็ได้ที่ต้องการ

workshop-03

  • จากนั้นเราจะได้ json config ของ Firebase พร้อมกับวิธีลง firebase มา เราจะค้างหน้านี้กันไว้ก่อน (ใครเผลอปิดไป สามารถกลับมากดดูตรง Project Setting ใน Project Overview ได้)

workshop-04

มาที่ Project Vue เพื่อลง Firebase library และ config​

** สำหรับใครที่ทำบทก่อนนี้มาใช้ Source code ตัวเดิมได้ แต่สำหรับใครที่พึ่งมา join กันใน Session นี้ clone source code นี้ลงและ run ตามได้

https://github.com/mikelopster/vue-easy-commerce

  • เปิด Terminal project ขึ้นมาแล้ว run คำสั่ง ตามคำแนะนำของ Firebase เลย
npm install firebase
  • จากนั้นที่ src สร้างไฟล์ใหม่ firebase.js ออกมา และทำการนำ config และ import library เข้ามา และเป็นไฟล์สำหรับรวม Config ของ Firebase เอาไว้ (เพื่อให้จะได้ไม่ต้อง setup config จากหลายที่ด้วย)
import { initializeApp } from 'firebase/app'
import { getFirestore, connectFirestoreEmulator } from 'firebase/firestore/lite'

const firebaseConfig = {
/* config ตามภาพด้านบนเลย */
}

// ทำการ init app firebase ขึ้นมา
const app = initializeApp(firebaseConfig)

// ทำการ init firestore เพื่อทำการใช้ Firestore service
const db = getFirestore(app)

// ทำการเปิด Connection ไปยัง Emulator ของ Firestore (หากไม่ใส่บรรทัดนี้) = จะต่อไปยัง Cloud Firestore แทน
connectFirestoreEmulator(db, '127.0.0.1', 8080)

// export database ออกไปใช้
export {
db
}

ตัวอย่างการใส่

workshop-05

เอกสารต้นฉบับการติดตั้ง Firestore: https://firebase.google.com/docs/firestore/quickstart

เพียงเท่านี้ก็เป็นการ setup Firestore เรียบร้อย

เปลี่ยน localstorage ใน store/user/product.js ให้เป็น Firestore​

  • ทำการ import db เข้ามาจาก config firebase (ที่เรา export เอาไว้)
  • import คำสั่ง collection, getDocs จาก Firestore มาเพื่อ get ข้อมูล
  • เปลี่ยนตรง loadProduct() จาก localstorage เป็น Firestore แทน

ไฟล์ store/user/product.js

import { defineStore } from 'pinia'

// import library Firestore
import { collection, getDocs } from 'firebase/firestore/lite'

// import db ตัวแทนของ Firestore
import { db } from '@/firebase'

export const useUserProductStore = defineStore('user-product', {
state: () => ({
list: [],
loaded: false
}),
actions: {
async loadProduct () {
// เปลี่ยนมาดึงจาก collection
const productsCol = collection(db, 'products')
const productSnapshop = await getDocs(productsCol)
const productList = productSnapshop.docs.map(doc => doc.data())
if (productList && productList.length > 0) {
// นำแทนกลับไปใส่ list แทน
this.list = productList
}
this.loaded = true
},
filterProducts (searchName) {
if (!this.loaded) {
this.loadProduct()
}
return this.list.filter(product => product.name.includes(searchName))
}
}
})

ลองทดสอบโดยการไปเพิ่มใน Firebase Emulator ของตัว Firestore โดยการ

  • เข้าไปที่ http://127.0.0.1:4000/firestore
  • เพิ่ม collection (ทางด้านซ้าย) ชื่อ products
  • เพิ่ม ข้อมูล 1 document เข้าไป (หน้าตาเหมือน JSON ก่อนหน้านี้ เช่นตามภาพนี้)

workshop-06

workshop-07

เมื่อเพิ่มเรียบร้อยก็จะได้หน้าตาประมาณนี้ออกมา

workshop-08

เมื่อกลับมาดูผลลัพธ์ที่หน้าจอ UI ของ Vue (โดยการ run ผ่าน npm run dev > http://localhost:5173 หน้าแรก)

workshop-09

ส่วนอันนี้เป็นการทดลองระหว่างการใส่ข้อมูล Firestore เข้าไปยัง Cloud Firebase กับ Firebase emulator เพียงจากการไม่ใส่คำสั่ง connectFirestoreEmulator

workshop-10

ประมาณนี้สำหรับ Session นี้เพื่อเป็นการยืนยันว่า Firebase Emulator ทำงานได้อย่างถูกต้อง (เราจะกลับมาเน้นย้ำเนื้อหา Firestore อีกทีกันในอนาคตกัน)