Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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 thông 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() , trong đó cho thấy một URL mà chấp nhận một giá trị văn bản và ghi nó với Cloud FireStore.
  • makeUppercase() , mà gây nên trên đám mây FireStore ghi và biến đổi văn bản sang chữ hoa.

Chúng tôi đã chọn Mây FireStore và chức năng Javascript HTTP-kích hoạt cho mẫu này một phần là do những trigger nền có thể được kiểm tra kỹ lưỡng thông qua các căn cứ hỏa lực địa phương 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 trigger nền ví dụ như Remote Config, TestLab, và trigger Analytics đều có thể được kiểm tra một cách tương tác sử dụng 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ó, nhảy để xét mã hoàn chỉnh mẫu .

Tạo dự án Firebase

  1. Trong căn cứ hỏa lực console , bấm Add dự án.

    • Để thêm tài nguyên căn cứ hỏa lực để một dự án Google Cloud hiện, nhập tên dự án của mình hoặc chọn nó từ menu thả xuống.

    • Để tạo một dự án mới, hãy nhập tên dự án mong muốn. Bạn cũng có thể tùy chọn chỉnh sửa ID dự án hiển thị bên dưới tên dự án.

  2. Nếu được nhắc, xem xét và chấp nhận các điều khoản căn cứ hỏa lực .

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

  4. (Không bắt buộc) Thiết lập Google Analytics cho dự án của bạn, cho phép bạn để có một trải nghiệm tối ưu sử dụng bất kỳ sản phẩm căn cứ hỏa lực sau:

    Hoặc chọn một hiện tài khoản Google Analytics hoặc để tạo một tài khoản mới.

    Nếu bạn tạo một tài khoản mới, chọn bạn Analytics báo cáo vị trí , sau đó chấp nhận cài đặt chia sẻ dữ liệu và điều khoản của Google Analytics cho dự án của bạn.

  5. Bấm Tạo dự án (hoặc Add căn cứ hỏa lực, nếu bạn đang sử dụng một dự án Google Cloud 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 Node.js môi trường vào các chức năng ghi, và bạn sẽ cần các căn cứ hỏa lực CLI chức năng triển khai đến các chức năng của Cloud chạy. Để cài đặt Node.js và NPM , Node quản lý phiên bản được khuyến khích.

Một khi bạn đã Node.js và NPM cài đặt, cài đặt các căn cứ hỏa lực CLI 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

Thao tác này sẽ cài đặt lệnh firebase khả dụng trên toàn cầu. Nếu lệnh thất bại, bạn có thể cần phải thay đổi quyền truy NPM . Để cập nhật lên phiên bản mới nhất của firebase-tools , 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ụ 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. Theo mục đích của hướng dẫn này, bạn cũng sẽ cần khởi tạo Cloud Firestore.

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

  1. Chạy firebase login để đăng nhập thông qua trình duyệt và xác nhận công cụ căn cứ hỏa lực.
  2. Đi tới thư mục dự án Firebase của bạn.
  3. Run 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 Firestore và tệp chỉ mục. Nếu bạn chưa sử dụng đám mây FireStore trong dự án này chưa, bạn cũng sẽ cần phải chọn một chế độ khởi động và vị trí cho FireStore như mô tả trong Bắt đầu với Cloud FireStore .
  4. Run 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. Nó là an toàn để giảm nếu bạn muốn quản lý phụ thuộc theo cách khác, tuy nhiên nếu bạn làm giảm bạn sẽ cần phải chạy npm install trước khi bắt chước 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, 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

Các package.json tập tin được tạo ra trong quá trình khởi chứa một 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 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 dòng như sau vào index.js file:

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

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

Những dòng tải firebase-functionsfirebase-admin mô-đun, và khởi tạo một admin ví dụ ứng dụng từ đó thay đổi Mây FireStore có thể được thực hiện. Bất cứ nơi nào SDK quản trị hỗ trợ có sẵn, vì nó là dành cho FCM, xác thực, và Cơ sở dữ liệu căn cứ hỏa lực Realtime, nó cung cấp một cách mạnh mẽ để hội nhập căn cứ hỏa lực sử dụng đám mây Chức năng.

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 để 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, xem Dependencies Xử lý .

Thêm addMessage() chức năng

Đối với addMessage() chức năng, thêm những dòng này để index.js :

// Take the text parameter passed to this HTTP endpoint and insert it into 
// 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 Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

Các addMessage() chức năng là một HTTP điểm cuối. Bất kỳ yêu cầu đến kết quả endpoint trong ExpressJS kiểu Yêu cầuđáp ứng các đối tượng được chuyển sang người onRequest() gọi lại.

HTTP chức năng đồng bộ (tương tự như chức năng callable ), vì vậy bạn nên gửi một phản ứng càng nhanh càng tốt công việc và hoãn sử dụng đám mây FireStore. Các addMessage() HTTP chức năng vượt qua một giá trị văn bản vào HTTP endpoint và chèn nó vào cơ sở dữ liệu theo đường dẫn /messages/:documentId/original .

Thêm makeUppercase() chức năng

Đối với makeUppercase() chức năng, thêm những dòng này để 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 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 Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

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

Niềng răng-ví dụ, {documentId} -surround "thông số", các kí hiệu mà phơi bày dữ liệu phù hợp của họ trong callback.

Đám mây FireStore kích hoạt onWrite() gọi lại bất cứ khi nào dữ liệu được viết hoặc cập nhật trên các tài liệu nhất định.

Các chức năng hướng sự kiện như sự kiện Cloud Firestore là không đồng bộ. Chức năng gọi lại phải trả lại hoặc là một null , một đối tượng, hoặc một lời hứa . 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 Sync, async, và lời hứa .

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

Các căn cứ hỏa lực địa phương Emulator Suite cho phép bạn xây dựng và ứng dụng thử nghiệm trên máy tính cục bộ của bạn thay vì triển khai một dự án căn cứ hỏa lực. 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ó khả năng 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 các URL của Emulator Suite UI. Nó mặc định là localhost: 4000 , nhưng có thể được lưu trữ trên một cổng khác nhau trên máy tính 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 cho URL của hàm HTTP addMessage() . Nó sẽ trông giống 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 đến cuối URL của hàm. Điều này sẽ trông 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 tin nhắn "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 Log, bạn sẽ thấy các bản ghi mới cho thấy rằng các chức năng addMessage()makeUppercase() ran:

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

      i hàm: 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ông báo ban đầu của bạn cũng như các phiên bản uppercased thông điệp của bạn (nếu nó đã được ban "uppercaseme", 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 14 môi trường runtime, dự án của bạn phải nằm trong kế hoạch giá Blaze . Xem đám mây Chức năng giá .

Để hoàn thành việc hướng dẫn, triển khai các chức năng của bạn và sau đó thực hiện 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ạn không cần phải lo lắng về nó bây giờ, một số chức năng sản xuất HTTP nên chỉ định một vị trí để giảm thiểu độ trễ mạng.

    Nếu bạn gặp lỗi truy cập như "Không thể ủy quyền tiếp cận với dự án", hãy thử kiểm tra của bạn aliasing dự án .

  2. Sử dụng addMessage() đầu ra URL bằng CLI, thêm một tham số truy vấn văn bản, và mở nó trong một 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 gây nên makeUppercase() , mà viết một phiên bản chữ hoa của chuỗi.

Sau khi triển khai và thực hiện các chức năng, bạn có thể xem các bản ghi trong căn cứ hỏa lực console Cloud Chức năng . Nếu bạn cần phải xóa chức năng trong việc phát triển hoặc sản xuất, sử dụng các căn cứ hỏa lực CLI.

Trong quá trình sản xuất, bạn có thể muốn tối ưu hóa hiệu suất chức năng và kiểm soát chi phí bằng cách đặt số lượng phiên bản tối thiểu và tối đa để chạy. Xem hành vi mở rộng quy mô kiểm soát để biết thêm thông tin về các tùy chọn thời gian chạy.

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

Dưới đây là hoàn thành functions/index.js chứa các chức năng addMessage()makeUppercase() . Các hàm này cho phép bạn truyền một tham số đến một điểm cuối HTTP ghi giá trị vào Cloud Firestore, sau đó biế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 set up triggers.
const functions = require('firebase-functions');

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

// Take the text parameter passed to this HTTP endpoint and insert it into 
// 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 Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully 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 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 Firestore.
      // Setting an 'uppercase' field in 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 Cloud Chức năng cũng như hướng dẫn cho văn bản chức năng để xử lý các loại sự kiện được hỗ trợ bởi đám mây Chức năng.

Để 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.