Cloud Firestore triggers (part 1)
Bài đăng này đã không được cập nhật trong 3 năm
Xin chào mọi người, bài viết hôm nay mình xin chia sẻ về Cloud Firestore triggers
một trong những tính năng của Cloud Functions
, trước khi tìm hiểu về Cloud Firestore triggers
chúng ta sẽ tìm hiểu Cloud Functions
là gì?
Cloud Functions
là 1 sản phẩm của Google
. Cloud Functions
cho phép bạn chạy code backend
tự động trigger
các event
được kích hoạt bởi tính năng của Firebase (Google)
.
Tại sao lại sử dụng Cloud Functions
?
Việc chạy và thiết lập máy chủ có thể là một công việc thật sự khó khăn, bạn phải xử lý các vấn đề như khả năng mở rộng, viết code bằng các ngôn ngữ bên phía máy chủ. Nhưng với Cloud Functions
sự phức tạp đó sẽ được giảm xuống. Ngoài ra, các tác vụ có tính toán cường độ cao có thể được thực hiện trên cloud thay vì trên thiết bị của máy khách, tính bảo mật sẽ cao hơn.
Cloud Functions hỗ trợ các kích hoạt sau:
- Realtime Database Triggers: kích hoạt một hàm khi một sự kiện ghi xảy ra trên một đường dẫn trong một cơ sở dữ liệu.
- Authentication Triggers: kích hoạt một hàm khi một người dùng mới được tạo hoặc khi một người dùng bị xóa.
- Analytics Triggers: kích hoạt một hàm khi một sự kiện chuyển đổi mới được ghi nhật ký (log).
- Cloud Storage Triggers: một hàm có thể được kích hoạt khi có bất kỳ sự thay đổi nào bên trong một nhóm chẳng hạn như một tập tin hoặc thư mục được tải lên, cập nhật hoặc xóa.
- Cloud Pub/Sub Triggers: kích hoạt một hàm khi nhận được một tin nhắn mới trong một chủ đề Google Cloud Pub/Sub.
- HTTPS Triggers: kích hoạt khi một yêu cầu được gới đến một endpoint.
Vòng đời của Cloud Firestore function
sẽ thực hiện những việc sau:
- Chờ các thay đổi của một
document
. - Kích hoạt một sự kiện xảy ra và thực hiện các tác vụ đó.
- Nhận một đối tượng dữ liệu được lưu trữ trong
document
được chỉ định. Đối với sự kiệnonWrite
hoặconUpdate
thì data nhận về sẽ gồmdata
trước vàdata
sau khi sự kiện được kích hoạt.
1. Cloud Firestore function triggers
Cloud Functions for Firebase SDK
sẽ exports a functions.firestore
cho phép bạn tạo các xử lý gắn với các sự kiệnCloud Firestore
cụ thể.
- onCreate: Được kích hoạt khi một
document
được ghi vào lần đầu tiên. - onUpdate : Được kích hoạt khi một
document
đã tồn tại và có sự thay đổi giá trị. - onDelete: Được kích hoạt khi một
document
bị xoá. - onWrite Được kích hoạt khi
onCreate
,onUpdate
hoặconDelete
được kích hoạt.
Lưu ý: Sự kiện Cloud Firestore
sẽ chỉ được kích hoạt khi document
thay đổi. Không thể thêm các sự kiện cho một trường cụ thể nào.
2. Writing Cloud Firestore-triggered functions
2.1 Định nghĩa một function trigger
Để định nghĩa một Cloud Firestore trigger
, ta cần chỉ định một document
cụ thể và một sự kiện đi kèm:
const functions = require('firebase-functions');
exports.myFunction = functions.firestore
.document('my-collection/{docId}')
.onWrite((change, context) => { /* to do */ });
Lưu ý: Đường dẫn đến document
không được chứa dấu / ở cuối.
2.2 Kích hoạt event cho một document cụ thể.
Nếu muốn kích hoạt một sự kiện cho bất kỳ thay đổi nào của một document
cụ thể thì bạn có thể sử dụng như sau:
// Lắng nghe bất kỳ thay đổi nào của document 'id001' trong collection 'users'
exports.myFunctionName = functions.firestore
.document('users/id001').onWrite((change, context) => {
// ... Your code here
});
2.3 Kích hoạt event cho tất cả document trong một collection.
Nếu muốn kích hoạt một nhóm document
, chẳng hạn như bất kỳ document
nào trong một collection
nhất định, thì hãy sử dụng {documentId}
thay cho id document
:
// Lắng nghe tất cả các document có trong collection 'users'
exports.myFunction = functions.firestore
.document('users/{userId}')
.onWrite((change, context) => {
// Ví dụ như nếu muốn thay đổi name của user có userId === id001 thành Trần Quỳnh
const { userId } = context.params
if (userId === 'id001') {
firestore.collection('users)
.doc(id0001)
.update({ name: 'Trần Quỳnh' })
}
});
Trong ví dụ này, khi bất kỳ trường nào trên bất kỳ document
của collection users
thay đổi, thì nó sẽ match với một userId
Nếu một document
trong collection users
có subcollection
và một trường nào trong subcollection
đó thay đổi thì userId
đó sẽ không được kích hoạt.
Và để giải quyết được vấn đề trên thì chúng ta sử dụng như sau:
// Lắng nghe tất cả document trong collection users and tất cả subcollection
exports.myFunction = functions.firestore
.document('users/{userId}/{messageCollectionId}/{messageId}')
.onWrite((change, context) => {
// to do ...
});
Lưu ý: Trigger phải luôn trỏ đến một document
, nếu bạn sử dụng users/{userId}/{messageCollectionId}
sẽ không hợp lệ vì nó đang trỏ đến một collection
. Và hợp lệ nếu bạn sử dụng users/{userId}/{messageCollectionId}/{messageId}
vì nó đang trỏ tới một document
cụ thể.
Vì bài viết khá dài nên mình xin tạm thời dừng tại đây và nhường lại nội dung trong bài tiếp theo. Hy vọng mọi người sẽ theo dõi và góp ý kiến nhé. Cảm ơn mọi người.
Tài liệu tham khảo: https://firebase.google.com/docs/functions/firestore-events
All rights reserved