- Nếu bạn chưa có Project Firebase, hãy tạo 1 project mới tại https://console.firebase.google.com/, click Add project và làm theo hướng dẫn.
- Khi đã tạo hoặc có Project Firebase rồi, thử gọi tên nó là test-classfunc nhé,
- Bây giờ bạn tiếp tục tạo 1 folder chứa dữ liệu của cloud function chứ nhỉ, hãy tạo 1 folder có tên “test-cloudfunctions”,
- Tiếp theo, để chuẩn bị cho quá trình cài đặt và init cloud function, trên terminal bạn chạy:
npm install --save firebase-functions@latest firebase-admin@latest
và cài đặt Filebase Tools:npm install -g firebase-tools
- Tiếp tục chạy firebse login để tiến hành đăng nhập vào firebase.
firebase login
. - Truy cập vào folder “test-cloudfunctions” ->
cd test-cloudfunctions
. - Thực hiện lệnh
firebase init
hoặcfirebase init functions
, chọn javascript để thực hiện. - Sau khi thực hiện xong, projects cloud functions của bạn sẽ có cấu trúc như sau:
json
+- .firebaserc # Hidden file that helps you quickly switch between
| # projects with `firebase use`
|
+- firebase.json # Describes properties for your project
|
+- functions/ # Directory containing all your functions code
|
+- .eslintrc.json # Optional file containing rules for JavaScript linting.
|
+- package.json # npm package file describing your Cloud Functions code
|
+- index.js # main source file for your Cloud Functions code
|
+- node_modules/ # directory where your dependencies (declared in
# package.json) are installed
trong file package.json, nếu muốn cài đặt môi trường cho cloud functions la node 10, hãy thêm "engines": {"node": "10"}
.
- Trong file
index.js
, tiến hành thêm các thông tin cài đặt cần thiết.
const admin = require('firebase-admin') const serviceAccount = require('./firebaseServiceAdmin.json'); // fire json services admin account get more: https://console.firebase.google.com/project/[projectId]/settings/serviceaccounts/adminsdk admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: 'https://[projectId].firebaseio.com', });
- Bây giờ hãy tạo cho mình 1 functions và thực hiện deploy functions đầu tiên của mình thôi. Dưới đây là 2 ví dụ:
Tạo AddMessage() functions
// Take the text parameter passed to this HTTP endpoint and insert it into // Cloud Firestore under the path /messages/:documentId/original exports.addMessage = functions.https.onRequest(async (req, res) => { // Grab the text parameter. const original = req.query.text; // Push the new message into Cloud Firestore using the Firebase Admin SDK. const writeResult = await admin.firestore().collection('messages').add({original: original}); // Send back a message that we've succesfully written the message res.json({result: `Message with ID: ${writeResult.id} added.`}); });
addMessage được gọi là http functions, có thể gửi request lên để lấy dữ liệu về theo các phương thức Get, Post, Put, Delete ....
tạo makeUppercase() functions
// Listens for new messages added to /messages/:documentId/original and creates an // uppercase version of the message to /messages/:documentId/uppercase exports.makeUppercase = functions.firestore().document('/messages/{documentId}') .onCreate((snap, context) => { // Grab the current value of what was written to Cloud Firestore. const original = snap.data().original; // Access the parameter `{documentId}` with `context.params` functions.logger.log('Uppercasing', context.params.documentId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to Cloud Firestore. // Setting an 'uppercase' field in Cloud Firestore document returns a Promise. return snap.ref.set({uppercase}, {merge: true}); });
Với các functions dạng makeUppercase, hoạt động theo dạng tự động trigger khi có sự thay đổi của collection Messages, ở đây khi tạo mới messages .onCreate((snap, context)
, ngoài ra còn có các kiểu khác như .onDelete
.onUpdate
.onWrite
- Deploy function
Chạy lệnh : firebase deploy --only functions
Hoặc nếu chỉ muốn deploy 1 functions riêng biệt.
chạy lệnh firebase deploy --only functions:[function name]
, function name => foldername Funtionname
Ví dụ: folder api có function name test.js
=> firebase deploy --only functions:apiTest
Trên đây mình đã hướng dẫn các bạn việc tạo và cài đặt, deploy 1 cloud functions mới, chúc các bạn thành công
- Tài liệu tham khảo