- 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ặc`firebase 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