Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

เริ่มต้น: เขียนทดสอบและปรับใช้ฟังก์ชันแรกของคุณ

ในการเริ่มต้นใช้งาน Cloud Functions ให้ลองทำตามบทช่วยสอนนี้ซึ่งเริ่มต้นด้วยงานการตั้งค่าที่จำเป็นและทำงานผ่านการสร้างทดสอบและปรับใช้ฟังก์ชันที่เกี่ยวข้องสองฟังก์ชัน:

  • addMessage() ซึ่งแสดง URL ที่ยอมรับค่าข้อความและเขียนลงใน Cloud Firestore
  • makeUppercase() ซึ่งทริกเกอร์บน Cloud Firestore เขียนและแปลงข้อความเป็นตัวพิมพ์ใหญ่

เราได้เลือกใช้ Cloud Firestore และฟังก์ชัน JavaScript ที่เรียกใช้ HTTP สำหรับตัวอย่างนี้บางส่วนเนื่องจากทริกเกอร์พื้นหลังเหล่านี้สามารถทดสอบได้อย่างละเอียดผ่าน Firebase Local Emulator Suite ชุดเครื่องมือนี้ยังรองรับ Realtime Database, PubSub, Auth และทริกเกอร์ที่เรียกได้ HTTP ทริกเกอร์พื้นหลังประเภทอื่น ๆ เช่นทริกเกอร์การกำหนดค่าระยะไกล TestLab และ Analytics สามารถ ทดสอบแบบโต้ตอบได้ โดยใช้ชุดเครื่องมือที่ไม่ได้อธิบายไว้ในหน้านี้

ส่วนต่อไปนี้ของบทช่วยสอนนี้ให้รายละเอียดขั้นตอนที่จำเป็นในการสร้างทดสอบและปรับใช้ตัวอย่าง หากคุณต้องการเพียงแค่เรียกใช้โค้ดและตรวจสอบให้ข้ามไปที่ ตรวจทานโค้ดตัวอย่าง ทั้งหมด

สร้างโครงการ Firebase

  1. ใน คอนโซล Firebase ให้คลิก เพิ่มโครงการ จากนั้นเลือกหรือป้อน ชื่อโครงการ

    หากคุณมีโปรเจ็กต์ Google Cloud Platform (GCP) อยู่แล้วคุณสามารถเลือกโปรเจ็กต์จากเมนูแบบเลื่อนลงเพื่อเพิ่มทรัพยากร Firebase ให้กับโปรเจ็กต์นั้น

  2. (ไม่บังคับ) หากคุณกำลังสร้างโครงการใหม่คุณสามารถแก้ไข รหัสโครงการ ได้

    Firebase จะกำหนดรหัสเฉพาะให้กับโครงการ Firebase ของคุณโดยอัตโนมัติ ไปที่ ทำความเข้าใจกับโครงการ Firebase เพื่อเรียนรู้ว่า Firebase ใช้รหัสโครงการอย่างไร

  3. คลิก ดำเนินการต่อ

  4. (ไม่บังคับ) ตั้งค่า Google Analytics สำหรับโครงการของคุณซึ่งช่วยให้คุณได้รับประสบการณ์ที่ดีที่สุดโดยใช้ผลิตภัณฑ์ Firebase ต่อไปนี้

    เมื่อได้รับแจ้งให้เลือกใช้ บัญชี Google Analytics ที่มีอยู่หรือสร้างบัญชีใหม่
    หากคุณเลือกที่จะสร้างบัญชีใหม่เลือก ตำแหน่งการรายงาน Analytics ของคุณจากนั้นยอมรับการตั้งค่าการแบ่งปันข้อมูลและข้อกำหนดของ Google Analytics สำหรับโครงการของคุณ

  5. คลิก สร้างโครงการ (หรือ เพิ่ม Firebase หากคุณใช้โครงการ GCP ที่มีอยู่)

Firebase จัดเตรียมทรัพยากรสำหรับโครงการ Firebase ของคุณโดยอัตโนมัติ เมื่อกระบวนการเสร็จสิ้นคุณจะเข้าสู่หน้าภาพรวมของโครงการ Firebase ในคอนโซล Firebase

ตั้งค่า Node.js และ Firebase CLI

คุณจะต้องมีสภาพแวดล้อม Node.js ในการเขียนฟังก์ชันและคุณจะต้องใช้ Firebase CLI เพื่อปรับใช้ฟังก์ชันกับรันไทม์ของ Cloud Functions สำหรับการติดตั้ง Node.js และ npm ขอแนะนำให้ใช้ Node Version Manager

เมื่อคุณติดตั้ง Node.js และ npm แล้วให้ ติดตั้ง Firebase CLI ด้วยวิธีการที่คุณต้องการ ในการติดตั้ง CLI ผ่าน npm ให้ใช้:

npm install -g firebase-tools

สิ่งนี้จะติดตั้งคำสั่ง firebase ที่ใช้ได้ทั่วโลก หากคำสั่งล้มเหลวคุณอาจต้อง เปลี่ยนสิทธิ์ npm หากต้องการอัปเดต firebase-tools เวอร์ชันล่าสุดให้รันคำสั่งเดิมอีกครั้ง

เริ่มต้นโครงการของคุณ

เมื่อคุณเริ่มต้น Firebase SDK สำหรับ Cloud Functions คุณจะสร้างโปรเจ็กต์เปล่าที่มีการอ้างอิงและโค้ดตัวอย่างขั้นต่ำและคุณเลือก TypeScript หรือ JavaScript สำหรับการเขียนฟังก์ชัน สำหรับจุดประสงค์ของบทช่วยสอนนี้คุณจะต้องเริ่มต้น Cloud Firestore ด้วย

ในการเริ่มต้นโครงการของคุณ:

  1. เรียกใช้การ firebase login เพื่อเข้าสู่ระบบผ่านเบราว์เซอร์และตรวจสอบสิทธิ์เครื่องมือ firebase
  2. ไปที่ไดเรกทอรีโครงการ Firebase
  3. เรียกใช้ firebase init firestore สำหรับบทช่วยสอนนี้คุณสามารถยอมรับค่าเริ่มต้นเมื่อได้รับแจ้งสำหรับกฎ Firestore และไฟล์ดัชนี หากคุณยังไม่ได้ใช้ Cloud Firestore ในโปรเจ็กต์นี้คุณจะต้องเลือกโหมดเริ่มต้นและตำแหน่งสำหรับ Firestore ตามที่อธิบายไว้ใน เริ่มต้นใช้งาน Cloud Firestore
  4. เรียกใช้ firebase init functions เครื่องมือนี้ช่วยให้คุณมีตัวเลือกในการติดตั้งการอ้างอิงด้วย npm มันปลอดภัยที่จะปฏิเสธหากคุณต้องการจัดการการอ้างอิงด้วยวิธีอื่นแม้ว่าคุณจะปฏิเสธคุณจะต้องรันการ npm install ก่อนที่จะจำลองหรือปรับใช้ฟังก์ชันของคุณ
  5. เครื่องมือนี้มีสองตัวเลือกสำหรับการรองรับภาษา:

    สำหรับบทช่วยสอนนี้ให้เลือก JavaScript

หลังจากคำสั่งเหล่านี้เสร็จสมบูรณ์โครงสร้างโครงการของคุณจะมีลักษณะดังนี้:

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

ไฟล์ package.json สร้างขึ้นระหว่างการเริ่มต้นมีคีย์สำคัญ: "engines": {"node": "10"} สิ่งนี้ระบุเวอร์ชัน Node.js ของคุณสำหรับการเขียนและปรับใช้ฟังก์ชัน คุณสามารถ เลือกเวอร์ชันที่รองรับอื่น ๆ

นำเข้าโมดูลที่ต้องการและเริ่มต้นแอป

หลังจากคุณเสร็จสิ้นภารกิจการตั้งค่าคุณสามารถเปิดไดเร็กทอรีต้นทางและเริ่มเพิ่มโค้ดตามที่อธิบายไว้ในส่วนต่อไปนี้ สำหรับตัวอย่างนี้โครงการของคุณต้องนำเข้าโมดูล Cloud Functions และ Admin SDK โดยใช้คำสั่ง Node require เพิ่มบรรทัดต่อไปนี้ในไฟล์ index.js ของคุณ:

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

บรรทัดเหล่านี้จะโหลด firebase-functions firebase-admin และโมดูล firebase-admin และเริ่มต้นอินสแตนซ์ของแอป admin ซึ่งสามารถทำการเปลี่ยนแปลง Cloud Firestore ได้ ทุกที่ที่มีการสนับสนุน Admin SDK เช่นเดียวกับ FCM, Authentication และ Firebase Realtime Database จะเป็นวิธีที่มีประสิทธิภาพในการผสานรวม Firebase โดยใช้ Cloud Functions

Firebase CLI จะติดตั้งโมดูล Firebase และ Firebase SDK สำหรับ Cloud Functions Node โดยอัตโนมัติเมื่อคุณเริ่มต้นโครงการ ในการเพิ่มไลบรารีของบุคคลที่สามในโปรเจ็กต์ของคุณคุณสามารถแก้ไข package.json และรันการ npm install สำหรับข้อมูลเพิ่มเติมโปรดดูที่ จัดการการอ้างอิง

เพิ่ม addMessage()

สำหรับ addMessage() ให้เพิ่มบรรทัดเหล่านี้ใน 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.`});
});

addMessage() คือจุดสิ้นสุด HTTP การร้องขอไปยังปลายทางใด ๆ จะส่งผลให้อ็อบเจ็กต์ คำร้องขอ และการ ตอบกลับ สไตล์ ExpressJS ส่งผ่านไปยังการเรียกกลับ onRequest()

ฟังก์ชัน HTTP เป็นแบบซิงโครนัส (คล้ายกับ ฟังก์ชันที่เรียกได้ ) ดังนั้นคุณควรตอบกลับโดยเร็วที่สุดและเลื่อนการทำงานโดยใช้ Cloud Firestore ฟังก์ชัน HTTP addMessage() ส่งผ่านค่าข้อความไปยังปลายทาง HTTP และแทรกลงในฐานข้อมูลภายใต้เส้นทาง /messages/:documentId/original

เพิ่ม makeUppercase()

สำหรับ makeUppercase() ให้เพิ่มบรรทัดเหล่านี้ใน 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});
    });

makeUppercase() ดำเนินการเมื่อเขียน Cloud Firestore ฟังก์ชัน ref.set กำหนดเอกสารที่จะรับฟัง ด้วยเหตุผลด้านประสิทธิภาพคุณควรเจาะจงให้มากที่สุด

วงเล็บปีกกาเช่น {documentId} พารามิเตอร์รอบ ๆ "สัญลักษณ์แทนที่แสดงข้อมูลที่ตรงกันในการเรียกกลับ

Cloud Firestore เรียกใช้การเรียกกลับ onWrite() ทุกครั้งที่มีการเขียนหรืออัปเดตข้อมูลบนเอกสารที่กำหนด

ฟังก์ชันที่ขับเคลื่อนด้วยเหตุการณ์เช่นเหตุการณ์ Cloud Firestore เป็นแบบอะซิงโครนัส ฟังก์ชันเรียกกลับควรส่งคืน null วัตถุหรือ สัญญา หากคุณไม่ส่งคืนอะไรเลยฟังก์ชันจะหมดเวลาส่งสัญญาณข้อผิดพลาดและจะลองใหม่ ดู Sync, Async และ Promises

จำลองการทำงานของฟังก์ชันของคุณ

Firebase Local Emulator Suite ช่วยให้คุณสร้างและทดสอบแอปบนเครื่องในพื้นที่ของคุณแทนที่จะทำให้ใช้งานได้กับโครงการ Firebase ขอแนะนำอย่างยิ่งให้ทำการทดสอบในพื้นที่ระหว่างการพัฒนาส่วนหนึ่งเป็นเพราะช่วยลดความเสี่ยงจากข้อผิดพลาดในการเข้ารหัสที่อาจทำให้เสียค่าใช้จ่ายในสภาพแวดล้อมการผลิต (ตัวอย่างเช่นการวนซ้ำที่ไม่สิ้นสุด)

เพื่อเลียนแบบฟังก์ชันของคุณ:

  1. เรียกใช้ firebase emulators:start และตรวจสอบผลลัพธ์สำหรับ URL ของ Emulator Suite UI ค่าเริ่มต้นเป็น localhost: 4000 แต่อาจโฮสต์บนพอร์ตอื่นบนเครื่องของคุณ ป้อน URL นั้นในเบราว์เซอร์ของคุณเพื่อเปิด UI ของ Emulator Suite

  2. ตรวจสอบเอาต์พุตของ firebase emulators:start command สำหรับ URL ของฟังก์ชัน HTTP addMessage() จะมีลักษณะคล้ายกับ http://localhost:5001/MY_PROJECT/us-central1/addMessage ยกเว้นว่า:

    1. MY_PROJECT จะถูกแทนที่ด้วยรหัสโครงการของคุณ
    2. พอร์ตอาจแตกต่างกันในเครื่องของคุณ
  3. เพิ่มสตริงการสืบค้น ?text=uppercaseme ต่อท้าย URL ของฟังก์ชัน สิ่งนี้ควรมีลักษณะดังนี้: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme คุณสามารถเลือกที่จะเปลี่ยนข้อความ "uppercaseme" เป็นข้อความที่กำหนดเองได้

  4. สร้างข้อความใหม่โดยเปิด URL ในแท็บใหม่ในเบราว์เซอร์ของคุณ

  5. ดูผลของฟังก์ชันใน Emulator Suite UI:

    1. ในแท็บ บันทึก คุณควรเห็นบันทึกใหม่ที่ระบุว่าฟังก์ชัน addMessage() และ makeUppercase() ทำงาน:

      i ฟังก์ชั่น: เริ่มต้นการเรียกใช้ "addMessage"

      i ฟังก์ชั่น: เริ่มต้นการเรียกใช้งาน "makeUppercase"

    2. ในแท็บ Firestore คุณควรเห็นเอกสารที่มีข้อความต้นฉบับของคุณเช่นเดียวกับข้อความในเวอร์ชันตัวพิมพ์ใหญ่ (หากเดิมเป็น "ตัวพิมพ์ใหญ่" คุณจะเห็น "UPPERCASEME")

ปรับใช้ฟังก์ชันกับสภาพแวดล้อมการผลิต

เมื่อฟังก์ชันของคุณทำงานตามที่ต้องการในโปรแกรมจำลองคุณสามารถดำเนินการปรับใช้ทดสอบและเรียกใช้งานได้ในสภาพแวดล้อมการใช้งานจริง โปรดทราบว่าในการปรับใช้กับสภาพแวดล้อมรันไทม์ Node.js 10 ที่แนะนำโปรเจ็กต์ของคุณต้องอยู่ใน แผนการเรียกเก็บเงิน แบบจ่ายตามการใช้งานของ Blaze ดู ราคา Cloud Functions

ในการทำบทช่วยสอนให้เสร็จสมบูรณ์ให้ปรับใช้ฟังก์ชันของคุณจากนั้นเรียกใช้ addMessage() เพื่อทริกเกอร์ makeUppercase()

  1. รันคำสั่งนี้เพื่อปรับใช้ฟังก์ชันของคุณ:

    $ firebase deploy --only functions
    

    หลังจากที่คุณเรียกใช้คำสั่งนี้ Firebase CLI จะส่งออก URL สำหรับปลายทางของฟังก์ชัน HTTP ในเทอร์มินัลของคุณคุณจะเห็นบรรทัดดังต่อไปนี้:

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

    URL มี ID โปรเจ็กต์ของคุณตลอดจนภูมิภาคสำหรับฟังก์ชัน HTTP แม้ว่าคุณจะไม่ต้องกังวลในตอนนี้ แต่ฟังก์ชัน HTTP ที่ใช้งานจริงบางอย่างควรระบุ ตำแหน่ง เพื่อลดเวลาแฝงของเครือข่าย

    หากคุณพบข้อผิดพลาดในการเข้าถึงเช่น "ไม่สามารถให้สิทธิ์การเข้าถึงโปรเจ็กต์ได้" ให้ลองตรวจสอบ ชื่อแทนโปรเจ็กต์ ของคุณ

  2. ใช้เอาต์พุต URL addMessage() โดย CLI เพิ่มพารามิเตอร์เคียวรีข้อความและเปิดในเบราว์เซอร์:

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

    ฟังก์ชันจะเรียกใช้และเปลี่ยนเส้นทางเบราว์เซอร์ไปยังคอนโซล Firebase ที่ตำแหน่งฐานข้อมูลที่จัดเก็บสตริงข้อความ เหตุการณ์การเขียนนี้ทริกเกอร์ makeUppercase() ซึ่งเขียนสตริงเวอร์ชันตัวพิมพ์ใหญ่

หลังจากปรับใช้และเรียกใช้ฟังก์ชันแล้วคุณจะ ดูบันทึกในคอนโซล Firebase สำหรับ Cloud Functions ได้ หากคุณต้องการ ลบฟังก์ชัน ในการพัฒนาหรือการใช้งานจริงให้ใช้ Firebase CLI

ตรวจสอบโค้ดตัวอย่างที่สมบูรณ์

นี่คือ functions/index.js ที่สมบูรณ์ซึ่งมีฟังก์ชัน addMessage() และ makeUppercase() ฟังก์ชันเหล่านี้ช่วยให้คุณสามารถส่งผ่านพารามิเตอร์ไปยังปลายทาง HTTP ที่เขียนค่าไปยัง Cloud Firestore จากนั้นแปลงค่าโดยใช้ตัวพิมพ์ใหญ่ทั้งหมดในสตริง

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

ขั้นตอนถัดไป

ในเอกสารนี้คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับ แนวคิดทั่วไป สำหรับ Cloud Functions ตลอดจนคำแนะนำใน การเขียนฟังก์ชัน เพื่อจัดการกับประเภทเหตุการณ์ที่ Cloud Functions รองรับ

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Cloud Functions คุณสามารถทำสิ่งต่อไปนี้:

วิดีโอสอน

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Cloud Functions ได้โดยดูวิดีโอแนะนำ ในวิดีโอนี้คุณจะพบคำแนะนำโดยละเอียดเกี่ยวกับการเริ่มต้นใช้งาน Cloud Functions รวมถึงการตั้งค่า Node.js และ CLI