Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Bắt đầu: viết, kiểm tra và triển khai các chức năng đầu tiên của bạn

Để bắt đầu với Chức năng đám mây, hãy thử làm việc qua hướng dẫn này, bắt đầu với các tác vụ thiết lập bắt buộc và hoạt động thông qua việc tạo, thử nghiệm và triển khai hai chức năng liên quan:

  • addMessage() , hiển thị một URL chấp nhận giá trị văn bản và ghi nó vào Cloud Firestore.
  • makeUppercase() , kích hoạt trên Cloud Firestore viết và chuyển văn bản thành chữ hoa.

Chúng tôi đã chọn Cloud Firestore và các chức năng JavaScript được kích hoạt bởi HTTP cho mẫu này một phần vì các trình kích hoạt nền này có thể được kiểm tra kỹ lưỡng thông qua Firebase Local Emulator Suite . Bộ công cụ này cũng hỗ trợ Cơ sở dữ liệu thời gian thực, PubSub, Auth và các trình kích hoạt có thể gọi HTTP. Các loại trình kích hoạt nền khác như Trình kích hoạt cấu hình từ xa, TestLab và Analytics đều có thể được kiểm tra tương tác bằng cách sử dụng các bộ công cụ không được mô tả trong trang này.

Các phần sau của hướng dẫn này trình bày chi tiết các bước cần thiết để xây dựng, kiểm tra và triển khai mẫu. Nếu bạn chỉ muốn chạy mã và kiểm tra nó, hãy chuyển đến Xem lại mã mẫu hoàn chỉnh .

Tạo dự án Firebase

  1. Trong bảng điều khiển Firebase , nhấp vào Thêm dự án , sau đó chọn hoặc nhập tên Dự án .

    Nếu bạn có dự án Google Cloud Platform (GCP) hiện tại, bạn có thể chọn dự án từ menu thả xuống để thêm tài nguyên Firebase vào dự án đó.

  2. (Tùy chọn) Nếu bạn đang tạo một dự án mới, bạn có thể chỉnh sửa ID dự án .

    Firebase tự động chỉ định một ID duy nhất cho dự án Firebase của bạn. Truy cập Tìm hiểu các dự án Firebase để tìm hiểu về cách Firebase sử dụng ID dự án.

  3. Nhấp vào Tiếp tục .

  4. (Tùy chọn) Thiết lập Google Analytics cho dự án của bạn, giúp bạn có trải nghiệm tối ưu khi sử dụng bất kỳ sản phẩm Firebase nào sau đây:

    Khi được nhắc, hãy chọn sử dụng tài khoản Google Analytics hiện có hoặc tạo tài khoản mới.
    Nếu bạn chọn tạo tài khoản mới, hãy chọn vị trí báo cáo Analytics , sau đó chấp nhận cài đặt chia sẻ dữ liệu và điều khoản Google Analytics cho dự án của bạn.

  5. Nhấp vào Tạo dự án (hoặc Thêm Firebase , nếu bạn đang sử dụng dự án GCP hiện có).

Firebase tự động cung cấp tài nguyên cho dự án Firebase của bạn. Khi quá trình hoàn tất, bạn sẽ được đưa đến trang tổng quan cho dự án Firebase của mình trong bảng điều khiển Firebase.

Thiết lập Node.js và Firebase CLI

Bạn sẽ cần một môi trường Node.js để viết các chức năng và bạn sẽ cần Firebase CLI để triển khai các chức năng cho thời gian chạy Chức năng đám mây. Để cài đặt Node.js và npm , nên sử dụng Trình quản lý phiên bản Node .

Sau khi bạn đã cài đặt Node.js và npm, hãy cài đặt Firebase CLI thông qua phương pháp ưa thích của bạn. Để cài đặt CLI qua npm, hãy sử dụng:

npm install -g firebase-tools

Điều này sẽ cài đặt lệnh firebase khả dụng trên toàn cầu. Nếu lệnh không thành công, bạn có thể cần phải thay đổi quyền npm . Để cập nhật lên phiên bản firebase-tools , hãy chạy lại lệnh tương tự.

Khởi tạo dự án của bạn

Khi bạn khởi tạo SDK Firebase cho Chức năng đám mây, bạn tạo một dự án trống có chứa các phần phụ thuộc và một số mã mẫu tối thiểu và bạn chọn TypeScript hoặc JavaScript để soạn các hàm. Đối với mục đích của hướng dẫn này, bạn cũng sẽ cần khởi chạy Cloud Firestore.

Để khởi tạo dự án của bạn:

  1. Chạy firebase login để đăng nhập qua trình duyệt và xác thực công cụ firebase.
  2. Đi tới thư mục dự án Firebase của bạn.
  3. Chạy firebase init firestore . Đối với hướng dẫn này, bạn có thể chấp nhận các giá trị mặc định khi được nhắc cho các quy tắc và tệp chỉ mục của Firestore. Nếu bạn chưa sử dụng Cloud Firestore trong dự án này, bạn cũng sẽ cần chọn chế độ và vị trí bắt đầu cho Firestore như được mô tả trong Bắt đầu với Cloud Firestore .
  4. Chạy các firebase init functions . Công cụ này cung cấp cho bạn một tùy chọn để cài đặt các phụ thuộc với npm. Có thể an toàn từ chối nếu bạn muốn quản lý sự phụ thuộc theo cách khác, mặc dù nếu từ chối, bạn sẽ cần chạy npm install trước khi mô phỏng hoặc triển khai các chức năng của mình.
  5. Công cụ cung cấp cho bạn hai tùy chọn để hỗ trợ ngôn ngữ:

    Đối với hướng dẫn này, hãy chọn JavaScript .

Sau khi các lệnh này hoàn tất thành công, cấu trúc dự án của bạn trông giống như sau:

myproject
 +- .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

Tệp package.json được tạo trong quá trình khởi tạo chứa khóa quan trọng: "engines": {"node": "10"} . Điều này chỉ định phiên bản Node.js của bạn để viết và triển khai các chức năng. Bạn có thể chọn các phiên bản được hỗ trợ khác .

Nhập các mô-đun bắt buộc và khởi chạy ứng dụng

Sau khi hoàn thành các tác vụ thiết lập, bạn có thể mở thư mục nguồn và bắt đầu thêm mã như được mô tả trong các phần sau. Đối với mẫu này, dự án của bạn phải nhập các chức năng Cloud và module SDK quản trị sử dụng Node require báo cáo. Thêm các dòng như sau vào index.js của bạn:

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Cloud Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

Các dòng này tải các mô-đun firebase-functionsfirebase-admin , đồng thời khởi tạo phiên bản ứng dụng admin mà từ đó có thể thực hiện các thay đổi trên Cloud Firestore. Bất cứ nơi nào hỗ trợ SDK quản trị viên khả dụng, như dành cho FCM, Xác thực và Cơ sở dữ liệu thời gian thực của Firebase, nó cung cấp một cách mạnh mẽ để tích hợp Firebase bằng Chức năng đám mây.

Firebase CLI tự động cài đặt Firebase và SDK Firebase cho các mô-đun Nút chức năng đám mây khi bạn khởi tạo dự án của mình. Để thêm thư viện của bên thứ 3 vào dự án của bạn, bạn có thể sửa đổi package.json và chạy npm install . Để biết thêm thông tin, hãy xem Xử lý sự phụ thuộc .

Thêm hàm addMessage()

Đối với hàm addMessage() , hãy thêm các dòng sau vào index.js :

// 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.`});
});

Hàm addMessage() là một điểm cuối HTTP. Bất kỳ yêu cầu nào đến điểm cuối đều dẫn đến các đối tượng Yêu cầuPhản hồi kiểu ExpressJS được chuyển đến onRequest() gọi lại onRequest() .

Các hàm HTTP là đồng bộ (tương tự như các hàm có thể gọi ), vì vậy bạn nên gửi phản hồi càng nhanh càng tốt và trì hoãn công việc bằng Cloud Firestore. Hàm addMessage() HTTP chuyển một giá trị văn bản đến điểm cuối HTTP và chèn nó vào cơ sở dữ liệu theo đường dẫn /messages/:documentId/original .

Thêm hàm makeUppercase()

Đối với hàm makeUppercase() , hãy thêm các dòng sau vào index.js :

// 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});
    });

Hàm makeUppercase() thực thi khi Cloud Firestore được ghi vào. Hàm ref.set xác định tài liệu để nghe. Vì lý do hiệu suất, bạn nên càng cụ thể càng tốt.

Dấu ngoặc nhọn — ví dụ: tham số {documentId} —surround "," ký tự đại diện hiển thị dữ liệu phù hợp của chúng trong lệnh gọi lại.

Cloud Firestore kích hoạt lệnh gọi lại onWrite() bất cứ khi nào dữ liệu được ghi hoặc cập nhật trên tài liệu nhất định.

Các chức năng theo hướng sự kiện như sự kiện Cloud Firestore là không đồng bộ. Hàm callback phải trả về null , Object hoặc Promise . Nếu bạn không trả về bất cứ điều gì, hàm sẽ hết thời gian chờ, báo hiệu lỗi và được thử lại. Xem Đồng bộ hóa, Không đồng bộ và Hứa hẹn .

Mô phỏng việc thực thi các chức năng của bạn

Firebase Local Emulator Suite cho phép bạn tạo và thử nghiệm các ứng dụng trên máy cục bộ của mình thay vì triển khai cho một dự án Firebase. Thử nghiệm cục bộ trong quá trình phát triển được khuyến khích mạnh mẽ, một phần vì nó làm giảm rủi ro từ các lỗi mã hóa có thể phát sinh chi phí trong môi trường sản xuất (ví dụ: một vòng lặp vô hạn).

Để mô phỏng các chức năng của bạn:

  1. Chạy firebase emulators:start và kiểm tra đầu ra cho URL của giao diện người dùng Bộ giả lập. Nó mặc định là localhost: 4000 , nhưng có thể được lưu trữ trên một cổng khác trên máy của bạn. Nhập URL đó vào trình duyệt của bạn để mở Giao diện người dùng Bộ giả lập.

  2. Kiểm tra đầu ra của firebase emulators:start lệnh firebase emulators:start cho URL của hàm HTTP addMessage() . Nó sẽ trông tương tự như http://localhost:5001/MY_PROJECT/us-central1/addMessage , ngoại trừ:

    1. MY_PROJECT sẽ được thay thế bằng ID dự án của bạn.
    2. Cổng có thể khác trên máy cục bộ của bạn.
  3. Thêm chuỗi truy vấn ?text=uppercaseme vào cuối URL của hàm. Điều này sẽ giống như sau: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . Theo tùy chọn, bạn có thể thay đổi thông báo "chữ hoa" thành tin nhắn tùy chỉnh.

  4. Tạo một tin nhắn mới bằng cách mở URL trong một tab mới trong trình duyệt của bạn.

  5. Xem hiệu ứng của các chức năng trong Giao diện người dùng Bộ giả lập:

    1. Trong tab Nhật ký , bạn sẽ thấy các nhật ký mới chỉ ra rằng các hàm addMessage()makeUppercase() đã chạy:

      i chức năng: Bắt đầu thực thi "addMessage"

      i chức năng: Bắt đầu thực thi "makeUppercase"

    2. Trong tab Firestore , bạn sẽ thấy một tài liệu có chứa thư gốc cũng như phiên bản viết hoa của thư (nếu ban đầu là "chữ hoa", bạn sẽ thấy "UPPERCASEME").

Triển khai các chức năng cho môi trường sản xuất

Khi các chức năng của bạn hoạt động như mong muốn trong trình giả lập, bạn có thể tiến hành triển khai, thử nghiệm và chạy chúng trong môi trường sản xuất. Hãy ghi nhớ rằng để triển khai đến các khuyến cáo Node.js 10 môi trường runtime, dự án của bạn phải nằm trên pay-as-you-go Blaze kế hoạch thanh toán . Xem giá của Chức năng đám mây .

Để hoàn thành hướng dẫn, hãy triển khai các chức năng của bạn và sau đó thực thi addMessage() để kích hoạt makeUppercase() .

  1. Chạy lệnh này để triển khai các chức năng của bạn:

    $ firebase deploy --only functions
    

    Sau khi bạn chạy lệnh này, Firebase CLI xuất URL cho bất kỳ điểm cuối nào của hàm HTTP. Trong thiết bị đầu cuối của bạn, bạn sẽ thấy một dòng như sau:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    URL chứa ID dự án của bạn cũng như một vùng cho chức năng HTTP. Mặc dù bây giờ bạn không cần phải lo lắng về điều đó, một số hàm HTTP sản xuất sẽ chỉ định vị trí để giảm thiểu độ trễ mạng.

    Nếu bạn gặp phải lỗi truy cập, chẳng hạn như "Không thể cấp quyền truy cập vào dự án", hãy thử kiểm tra bí danh dự án của bạn.

  2. Sử dụng URL addMessage() do CLI xuất, thêm tham số truy vấn văn bản và mở nó trong trình duyệt:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    Hàm thực thi và chuyển hướng trình duyệt đến bảng điều khiển Firebase tại vị trí cơ sở dữ liệu nơi chuỗi văn bản được lưu trữ. Sự kiện ghi này kích hoạt makeUppercase() , viết một phiên bản viết hoa của chuỗi.

Sau khi triển khai và thực thi các chức năng, bạn có thể xem nhật ký trong bảng điều khiển Firebase cho Chức năng đám mây . Nếu bạn cần xóa các chức năng trong quá trình phát triển hoặc sản xuất, hãy sử dụng Firebase CLI.

Xem lại mã mẫu hoàn chỉnh

Đây là các functions/index.js đã hoàn thành chứa các hàm addMessage()makeUppercase() . Các hàm này cho phép bạn truyền một tham số tới một điểm cuối HTTP ghi giá trị vào Cloud Firestore, sau đó chuyển đổi nó bằng cách viết hoa tất cả các ký tự trong chuỗi.

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Cloud Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

// 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.`});
});

// 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});
    });

Bước tiếp theo

Trong tài liệu này, bạn có thể tìm thêm thông tin về các khái niệm chung cho Hàm đám mây cũng như hướng dẫn viết hàm để xử lý các loại sự kiện được hỗ trợ bởi Hàm đám mây.

Để tìm hiểu thêm về Chức năng đám mây, bạn cũng có thể làm như sau:

Video hướng dẫn

Bạn có thể tìm hiểu thêm về Chức năng đám mây bằng cách xem video hướng dẫn. Trong video này, bạn sẽ tìm thấy hướng dẫn chi tiết về cách bắt đầu với Chức năng đám mây, bao gồm thiết lập Node.js và CLI.