เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ
เซิร์ฟเวอร์ (Server) ของ NocoBase จะมีการทริกเกอร์เหตุการณ์ (Event) ที่เกี่ยวข้องในขั้นตอนต่าง ๆ ตลอดวงจรชีวิตของแอปพลิเคชัน วงจรชีวิตของปลั๊กอิน และการดำเนินการกับฐานข้อมูลครับ/ค่ะ นักพัฒนาปลั๊กอินสามารถดักฟัง (listen) เหตุการณ์เหล่านี้เพื่อนำไปใช้ในการขยายขอบเขตการทำงาน (extension logic) การทำงานอัตโนมัติ หรือการปรับแต่งพฤติกรรมต่าง ๆ ได้ครับ/ค่ะ
ระบบเหตุการณ์ของ NocoBase แบ่งออกเป็นสองระดับหลัก ๆ ดังนี้ครับ/ค่ะ:
app.on() - เหตุการณ์ระดับแอปพลิเคชัน: ใช้สำหรับดักฟังเหตุการณ์ที่เกี่ยวข้องกับวงจรชีวิตของแอปพลิเคชัน เช่น การเริ่มต้น (startup) การติดตั้ง (installation) การเปิดใช้งานปลั๊กอิน (enabling plugins) เป็นต้นครับ/ค่ะdb.on() - เหตุการณ์ระดับฐานข้อมูล: ใช้สำหรับดักฟังเหตุการณ์การดำเนินการที่เกิดขึ้นในระดับโมเดลข้อมูล เช่น การสร้าง (creating) การอัปเดต (updating) หรือการลบ (deleting) เรคคอร์ด เป็นต้นครับ/ค่ะทั้งสองระดับนี้สืบทอดมาจาก EventEmitter ของ Node.js ซึ่งรองรับการใช้งานอินเทอร์เฟซมาตรฐานอย่าง .on() .off() และ .emit() ครับ/ค่ะ นอกจากนี้ NocoBase ยังได้ขยายการรองรับ emitAsync เพื่อใช้ในการทริกเกอร์เหตุการณ์แบบอะซิงโครนัส (asynchronously) และรอให้ Listener ทั้งหมดทำงานจนเสร็จสมบูรณ์อีกด้วยครับ/ค่ะ
โดยทั่วไปแล้ว Event Listener ควรถูกลงทะเบียนในเมธอด beforeLoad() ของปลั๊กอินครับ/ค่ะ เพื่อให้มั่นใจว่าเหตุการณ์ต่าง ๆ พร้อมใช้งานตั้งแต่ช่วงที่ปลั๊กอินกำลังโหลด และตรรกะการทำงานที่ตามมาสามารถตอบสนองได้อย่างถูกต้องครับ/ค่ะ
app.on()เหตุการณ์ระดับแอปพลิเคชันใช้สำหรับดักจับการเปลี่ยนแปลงวงจรชีวิตของแอปพลิเคชัน NocoBase และปลั๊กอินครับ/ค่ะ เหมาะสำหรับการทำตรรกะการเริ่มต้น (initialization logic) การลงทะเบียนทรัพยากร (resource registration) หรือการตรวจสอบการพึ่งพาของปลั๊กอิน (plugin dependency detection) เป็นต้น
| ชื่อเหตุการณ์ | ช่วงเวลาที่ทริกเกอร์ | การใช้งานทั่วไป |
|---|---|---|
beforeLoad / afterLoad | ก่อน / หลังการโหลดแอปพลิเคชัน | ลงทะเบียนทรัพยากร, กำหนดค่าเริ่มต้น |
beforeStart / afterStart | ก่อน / หลังการเริ่มต้นบริการ | เริ่มต้นงาน, พิมพ์บันทึกการเริ่มต้น |
beforeInstall / afterInstall | ก่อน / หลังการติดตั้งแอปพลิเคชัน | กำหนดค่าข้อมูลเริ่มต้น, นำเข้าเทมเพลต |
beforeStop / afterStop | ก่อน / หลังการหยุดบริการ | ล้างทรัพยากร, บันทึกสถานะ |
beforeDestroy / afterDestroy | ก่อน / หลังการทำลายแอปพลิเคชัน | ลบแคช, ตัดการเชื่อมต่อ |
beforeLoadPlugin / afterLoadPlugin | ก่อน / หลังการโหลดปลั๊กอิน | แก้ไขการตั้งค่าปลั๊กอินหรือขยายฟังก์ชันการทำงาน |
beforeEnablePlugin / afterEnablePlugin | ก่อน / หลังการเปิดใช้งานปลั๊กอิน | ตรวจสอบการพึ่งพา, กำหนดค่าตรรกะปลั๊กอินเริ่มต้น |
beforeDisablePlugin / afterDisablePlugin | ก่อน / หลังการปิดใช้งานปลั๊กอิน | ล้างทรัพยากรปลั๊กอิน |
afterUpgrade | หลังจากอัปเกรดแอปพลิเคชันเสร็จสมบูรณ์ | ดำเนินการย้ายข้อมูลหรือแก้ไขความเข้ากันได้ |
ตัวอย่าง: การดักฟังเหตุการณ์การเริ่มต้นแอปพลิเคชัน
ตัวอย่าง: การดักฟังเหตุการณ์การโหลดปลั๊กอิน
db.on()เหตุการณ์ระดับฐานข้อมูลสามารถดักจับการเปลี่ยนแปลงข้อมูลต่าง ๆ ในระดับโมเดลได้ครับ/ค่ะ เหมาะสำหรับการทำ Audit (ตรวจสอบ), การซิงโครไนซ์ (synchronization), การเติมข้อมูลอัตโนมัติ (auto-filling) และการดำเนินการอื่น ๆ
| ชื่อเหตุการณ์ | ช่วงเวลาที่ทริกเกอร์ |
|---|---|
beforeSync / afterSync | ก่อน / หลังการซิงโครไนซ์โครงสร้างฐานข้อมูล |
beforeValidate / afterValidate | ก่อน / หลังการตรวจสอบความถูกต้องของข้อมูล |
beforeCreate / afterCreate | ก่อน / หลังการสร้างเรคคอร์ด |
beforeUpdate / afterUpdate | ก่อน / หลังการอัปเดตเรคคอร์ด |
beforeSave / afterSave | ก่อน / หลังการบันทึก (รวมถึงการสร้างและการอัปเดต) |
beforeDestroy / afterDestroy | ก่อน / หลังการลบเรคคอร์ด |
afterCreateWithAssociations / afterUpdateWithAssociations / afterSaveWithAssociations | หลังจากดำเนินการที่รวมข้อมูลความสัมพันธ์ |
beforeDefineCollection / afterDefineCollection | ก่อน / หลังการกำหนดคอลเลกชัน |
beforeRemoveCollection / afterRemoveCollection | ก่อน / หลังการลบคอลเลกชัน |
ตัวอย่าง: การดักฟังเหตุการณ์หลังจากสร้างข้อมูล
ตัวอย่าง: การดักฟังเหตุการณ์ก่อนอัปเดตข้อมูล