logologo
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
logologo

เริ่มต้นใช้งานฉบับย่อ

ภาพรวมการพัฒนาปลั๊กอิน
การเขียนปลั๊กอินแรกของคุณ
โครงสร้างไดเรกทอรีโปรเจกต์

การพัฒนาฝั่งเซิร์ฟเวอร์

ภาพรวม
ปลั๊กอิน
คอลเลกชัน
การดำเนินการฐานข้อมูล
การจัดการแหล่งข้อมูล
การจัดการทรัพยากร
การควบคุมการเข้าถึง (ACL)
มิดเดิลแวร์
แคช
เหตุการณ์
คอนเท็กซ์คำขอ
สคริปต์การย้ายข้อมูล
ล็อก
การทำให้เป็นสากล (I18n)
คำสั่ง
การจัดการงานที่กำหนดเวลา
การทดสอบ

การพัฒนาฝั่งไคลเอนต์

ภาพรวม
ปลั๊กอิน
คอนเท็กซ์
เราเตอร์
การควบคุมการเข้าถึง (ACL)
การจัดการแหล่งข้อมูล
ทรัพยากร
คำขอ
สไตล์และธีม
ล็อก
การทำให้เป็นสากล (I18n)
การทดสอบ

อื่นๆ

คู่มือการอัปเกรดปลั๊กอิน
รายการภาษา
การจัดการ Dependencies
การสร้าง
Previous Pageคอลเลกชัน
Next Pageการจัดการแหล่งข้อมูล
TIP

เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ

#Database

Database เป็นส่วนประกอบสำคัญของ แหล่งข้อมูล ประเภทฐานข้อมูล (DataSource) ครับ/ค่ะ แหล่งข้อมูลประเภทฐานข้อมูลแต่ละรายการจะมีอินสแตนซ์ Database ที่เกี่ยวข้อง ซึ่งสามารถเข้าถึงได้ผ่าน dataSource.db อินสแตนซ์ Database ของแหล่งข้อมูลหลักยังมีชื่อเรียกย่อ (alias) ที่สะดวกคือ app.db การทำความคุ้นเคยกับเมธอด (method) ทั่วไปของ db ถือเป็นพื้นฐานสำคัญในการเขียนปลั๊กอินฝั่งเซิร์ฟเวอร์ครับ/ค่ะ

#ส่วนประกอบของ Database

Database โดยทั่วไปประกอบด้วยส่วนประกอบดังต่อไปนี้ครับ/ค่ะ:

  • คอลเลกชัน: กำหนดโครงสร้างของตารางข้อมูลครับ/ค่ะ
  • Model: โมเดลที่สอดคล้องกับ ORM (โดยทั่วไปจัดการโดย Sequelize)
  • Repository: เลเยอร์ (layer) ที่ทำหน้าที่ห่อหุ้ม (encapsulate) ตรรกะการเข้าถึงข้อมูล และมีเมธอดการทำงานระดับสูงครับ/ค่ะ
  • FieldType: ประเภทของฟิลด์
  • FilterOperator: ตัวดำเนินการ (operator) ที่ใช้สำหรับการกรองข้อมูล
  • Event: เหตุการณ์วงจรชีวิต (lifecycle event) และเหตุการณ์ที่เกี่ยวข้องกับฐานข้อมูล

#ช่วงเวลาที่เหมาะสมในการใช้งานในปลั๊กอิน

#สิ่งที่เหมาะสมจะทำในขั้นตอน beforeLoad

ในขั้นตอนนี้ จะไม่สามารถดำเนินการกับฐานข้อมูลได้ครับ/ค่ะ เหมาะสำหรับการลงทะเบียนคลาสแบบสแตติก (static class registration) หรือการดักจับเหตุการณ์ (event listening)

  • db.registerFieldTypes() — กำหนดประเภทฟิลด์เอง
  • db.registerModels() — ลงทะเบียนคลาสโมเดลที่กำหนดเอง
  • db.registerRepositories() — ลงทะเบียนคลาส Repository ที่กำหนดเอง
  • db.registerOperators() — ลงทะเบียนตัวดำเนินการกรองที่กำหนดเอง
  • db.on() — ดักจับเหตุการณ์ที่เกี่ยวข้องกับฐานข้อมูล

#สิ่งที่เหมาะสมจะทำในขั้นตอน load

ในขั้นตอนนี้ การนิยามคลาสและเหตุการณ์ที่จำเป็นทั้งหมดได้ถูกโหลดเรียบร้อยแล้วครับ/ค่ะ ดังนั้น การโหลดตารางข้อมูลในขั้นตอนนี้จะไม่มีส่วนที่ขาดหายไปหรือตกหล่น

  • db.defineCollection() — กำหนดตารางข้อมูลใหม่
  • db.extendCollection() — ขยายการตั้งค่าตารางข้อมูลที่มีอยู่

หากเป็นการกำหนดตารางข้อมูลภายในของปลั๊กอิน (built-in tables) ขอแนะนำให้เก็บไว้ในไดเรกทอรี ./src/server/collections ครับ/ค่ะ ดูรายละเอียดเพิ่มเติมได้ที่ คอลเลกชัน

#การดำเนินการกับข้อมูล

Database มีวิธีการหลักสองวิธีในการเข้าถึงและดำเนินการกับข้อมูลครับ/ค่ะ:

#การดำเนินการผ่าน Repository

const repo = db.getRepository('users');
const user = await repo.findOne({ filter: { id: 1 } });

เลเยอร์ Repository มักจะใช้เพื่อห่อหุ้มตรรกะทางธุรกิจ (business logic) เช่น การแบ่งหน้า (pagination) การกรองข้อมูล (filtering) การตรวจสอบสิทธิ์ (permission checks) เป็นต้นครับ/ค่ะ

#การดำเนินการผ่าน Model

const UserModel = db.getModel('users');
const user = await UserModel.findByPk(1);

เลเยอร์ Model จะสอดคล้องโดยตรงกับเอนทิตี (entity) ของ ORM ครับ/ค่ะ เหมาะสำหรับการดำเนินการกับฐานข้อมูลในระดับที่ต่ำกว่า

#ขั้นตอนใดบ้างที่สามารถดำเนินการกับฐานข้อมูลได้?

#วงจรชีวิตของปลั๊กอิน

ขั้นตอนสามารถดำเนินการกับฐานข้อมูลได้
staticImportไม่
afterAddไม่
beforeLoadไม่
loadไม่
installได้
beforeEnableได้
afterEnableได้
beforeDisableได้
afterDisableได้
removeได้
handleSyncMessageได้

#เหตุการณ์ของแอป (App Events)

ขั้นตอนสามารถดำเนินการกับฐานข้อมูลได้
beforeLoadไม่
afterLoadไม่
beforeStartได้
afterStartได้
beforeInstallไม่
afterInstallได้
beforeStopได้
afterStopไม่
beforeDestroyได้
afterDestroyไม่
beforeLoadPluginไม่
afterLoadPluginไม่
beforeEnablePluginได้
afterEnablePluginได้
beforeDisablePluginได้
afterDisablePluginได้
afterUpgradeได้

#เหตุการณ์/ฮุกของ Database

ขั้นตอนสามารถดำเนินการกับฐานข้อมูลได้
beforeSyncไม่
afterSyncได้
beforeValidateได้
afterValidateได้
beforeCreateได้
afterCreateได้
beforeUpdateได้
afterUpdateได้
beforeSaveได้
afterSaveได้
beforeDestroyได้
afterDestroyได้
afterCreateWithAssociationsได้
afterUpdateWithAssociationsได้
afterSaveWithAssociationsได้
beforeDefineCollectionไม่
afterDefineCollectionไม่
beforeRemoveCollectionไม่
afterRemoveCollectionไม่