Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Memulai: tulis, uji, dan terapkan fungsi pertama Anda

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Untuk memulai Cloud Functions, coba pelajari tutorial ini, yang dimulai dengan tugas penyiapan yang diperlukan dan bekerja melalui pembuatan, pengujian, dan penerapan dua fungsi terkait:

  • addMessage() , yang menampilkan URL yang menerima nilai teks dan menuliskannya ke Cloud Firestore.
  • makeUppercase() , yang memicu penulisan di Cloud Firestore dan mengubah teks menjadi huruf besar.

Kami telah memilih Cloud Firestore dan fungsi JavaScript yang dipicu HTTP untuk contoh ini sebagian karena pemicu latar belakang ini dapat diuji secara menyeluruh melalui Firebase Local Emulator Suite . Toolset ini juga mendukung Realtime Database, PubSub, Auth, dan HTTP callable triggers. Jenis pemicu latar belakang lainnya seperti pemicu Remote Config, TestLab, dan Analytics semuanya dapat diuji secara interaktif menggunakan kumpulan alat yang tidak dijelaskan di halaman ini.

Bagian berikut dari tutorial ini merinci langkah-langkah yang diperlukan untuk membuat, menguji, dan menerapkan sampel. Jika Anda lebih suka menjalankan kode dan memeriksanya, lompat ke Review complete sample code .

Buat Proyek Firebase

  1. Di konsol Firebase , klik Tambahkan proyek .

    • Untuk menambahkan sumber daya Firebase ke proyek Google Cloud yang sudah ada , masukkan nama proyeknya atau pilih dari menu tarik-turun.

    • Untuk membuat proyek baru, masukkan nama proyek yang diinginkan. Secara opsional, Anda juga dapat mengedit ID proyek yang ditampilkan di bawah nama proyek.

  2. Jika diminta, tinjau dan setujui persyaratan Firebase .

  3. Klik Lanjutkan .

  4. (Opsional) Siapkan Google Analytics untuk proyek Anda, yang memungkinkan Anda mendapatkan pengalaman optimal menggunakan salah satu produk Firebase berikut:

    Pilih akun Google Analytics yang ada atau buat akun baru.

    Jika Anda membuat akun baru, pilih lokasi pelaporan Analytics , lalu setujui setelan berbagi data dan persyaratan Google Analytics untuk proyek Anda.

  5. Klik Create project (atau Add Firebase , jika Anda menggunakan project Google Cloud yang sudah ada).

Firebase secara otomatis menyediakan sumber daya untuk proyek Firebase Anda. Saat proses selesai, Anda akan dibawa ke halaman ikhtisar untuk proyek Firebase Anda di konsol Firebase.

Siapkan Node.js dan Firebase CLI

Anda memerlukan lingkungan Node.js untuk menulis fungsi, dan Anda memerlukan Firebase CLI untuk menerapkan fungsi ke runtime Cloud Functions. Untuk menginstal Node.js dan npm , Node Version Manager direkomendasikan.

Setelah Anda menginstal Node.js dan npm, instal Firebase CLI melalui metode pilihan Anda. Untuk menginstal CLI melalui npm, gunakan:

npm install -g firebase-tools

Ini menginstal perintah firebase yang tersedia secara global. Jika perintah gagal, Anda mungkin perlu mengubah npm permissions . Untuk memperbarui firebase-tools ke versi terbaru, jalankan kembali perintah yang sama.

Inisialisasi proyek Anda

Saat Anda menginisialisasi Firebase SDK untuk Cloud Functions, Anda membuat proyek kosong yang berisi dependensi dan beberapa kode contoh minimal, dan Anda memilih TypeScript atau JavaScript untuk menulis fungsi. Untuk keperluan tutorial ini, Anda juga perlu menginisialisasi Cloud Firestore.

Untuk menginisialisasi proyek Anda:

  1. Jalankan firebase login untuk masuk melalui browser dan mengautentikasi Firebase CLI.
  2. Buka direktori proyek Firebase Anda.
  3. Jalankan firebase init firestore . Untuk tutorial ini, Anda dapat menerima nilai default saat diminta untuk aturan Firestore dan file indeks. Jika Anda belum pernah menggunakan Cloud Firestore dalam project ini, Anda juga harus memilih mode awal dan lokasi untuk Firestore seperti yang dijelaskan dalam Memulai Cloud Firestore .
  4. Jalankan firebase init functions . CLI meminta Anda untuk memilih basis kode yang ada atau menginisialisasi dan memberi nama yang baru. Saat Anda baru memulai, satu basis kode di lokasi default sudah cukup; nanti, saat implementasi Anda meluas, Anda mungkin ingin mengatur fungsi dalam basis kode .
  5. CLI memberi Anda dua opsi untuk dukungan bahasa:

    Untuk tutorial ini, pilih JavaScript .

  6. CLI memberi Anda opsi untuk menginstal dependensi dengan npm. Aman untuk menolak jika Anda ingin mengelola dependensi dengan cara lain, meskipun jika Anda menolak, Anda harus menjalankan npm install sebelum meniru atau menggunakan fungsi Anda.

Setelah perintah ini berhasil diselesaikan, struktur proyek Anda terlihat seperti ini:

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

File package.json yang dibuat selama inisialisasi berisi kunci penting: "engines": {"node": "16"} . Ini menentukan versi Node.js Anda untuk menulis dan menerapkan fungsi. Anda dapat memilih versi lain yang didukung .

Impor modul yang diperlukan dan inisialisasi aplikasi

Setelah menyelesaikan tugas penyetelan, Anda dapat membuka direktori sumber dan mulai menambahkan kode seperti yang dijelaskan di bagian berikut. Untuk contoh ini, project Anda harus mengimpor modul Cloud Functions dan Admin SDK menggunakan pernyataan Node require . Tambahkan baris seperti berikut ke file index.js Anda:

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

Baris ini memuat firebase-functions dan firebase-admin , dan menginisialisasi instance aplikasi admin tempat perubahan Cloud Firestore dapat dilakukan. Di mana pun dukungan Admin SDK tersedia, seperti untuk FCM, Authentication, dan Firebase Realtime Database, dukungan ini menyediakan cara ampuh untuk mengintegrasikan Firebase menggunakan Cloud Functions.

Firebase CLI secara otomatis menginstal modul Firebase dan Firebase SDK untuk Cloud Functions Node saat Anda menginisialisasi proyek. Untuk menambahkan pustaka pihak ketiga ke proyek Anda, Anda dapat memodifikasi package.json dan menjalankan npm install . Untuk informasi selengkapnya, lihat Menangani Ketergantungan .

Tambahkan fungsi addMessage()

Untuk fungsi addMessage() , tambahkan baris berikut ke 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.`});
});

Fungsi addMessage() adalah titik akhir HTTP. Permintaan apa pun ke titik akhir menghasilkan objek Permintaan dan Respon bergaya ExpressJS diteruskan ke callback onRequest() .

Fungsi HTTP bersifat sinkron (mirip dengan fungsi yang dapat dipanggil ), jadi Anda harus mengirimkan respons secepat mungkin dan menunda pekerjaan menggunakan Cloud Firestore. Fungsi addMessage() HTTP meneruskan nilai teks ke titik akhir HTTP dan memasukkannya ke dalam database di bawah jalur /messages/:documentId/original .

Tambahkan fungsi makeUppercase()

Untuk fungsi makeUppercase() , tambahkan baris berikut ke 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});
    });

Fungsi makeUppercase() dijalankan saat Cloud Firestore ditulis. Fungsi ref.set menentukan dokumen yang akan didengarkan. Untuk alasan kinerja, Anda harus sespesifik mungkin.

Tanda kurung—misalnya, {documentId} —mengelilingi "parameter", karakter pengganti yang menampilkan data yang cocok di callback.

Cloud Firestore memicu callback onCreate() setiap kali pesan baru ditambahkan.

Fungsi yang digerakkan peristiwa seperti peristiwa Cloud Firestore bersifat asinkron. Fungsi callback harus mengembalikan null , Object, atau Promise . Jika Anda tidak mengembalikan apa pun, fungsi akan habis waktu, menandakan kesalahan, dan dicoba lagi. Lihat Sinkronisasi, Asinkron, dan Janji .

Emulasikan eksekusi fungsi Anda

Firebase Local Emulator Suite memungkinkan Anda membuat dan menguji aplikasi di mesin lokal Anda, bukan menerapkannya ke proyek Firebase. Pengujian lokal selama pengembangan sangat disarankan, sebagian karena menurunkan risiko kesalahan pengkodean yang berpotensi menimbulkan biaya dalam lingkungan produksi (misalnya, loop tak terbatas).

Untuk meniru fungsi Anda:

  1. Jalankan firebase emulators:start dan periksa output untuk URL UI Emulator Suite. Standarnya adalah localhost:4000 , tetapi mungkin dihosting di port lain di mesin Anda. Masukkan URL itu di browser Anda untuk membuka UI Emulator Suite.

  2. Periksa output firebase emulators:start perintah untuk URL fungsi HTTP addMessage() . Ini akan terlihat mirip dengan http://localhost:5001/MY_PROJECT/us-central1/addMessage , kecuali bahwa:

    1. MY_PROJECT akan diganti dengan ID proyek Anda.
    2. Port mungkin berbeda pada mesin lokal Anda.
  3. Tambahkan string kueri ?text=uppercaseme ke akhir URL fungsi. Ini akan terlihat seperti: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . Secara opsional, Anda dapat mengubah pesan "huruf besar" menjadi pesan khusus.

  4. Buat pesan baru dengan membuka URL di tab baru di browser Anda.

  5. Lihat efek fungsi di UI Emulator Suite:

    1. Di tab Log , Anda akan melihat log baru yang menunjukkan bahwa fungsi addMessage() dan makeUppercase() berjalan:

      i functions: Memulai eksekusi "addMessage"

      i functions: Memulai eksekusi "makeUppercase"

    2. Di tab Firestore , Anda akan melihat dokumen yang berisi pesan asli serta versi huruf besar dari pesan Anda (jika awalnya "huruf besar", Anda akan melihat "HURUF BESAR").

Men-deploy fungsi ke lingkungan produksi

Setelah fungsi Anda berfungsi seperti yang diinginkan di emulator, Anda dapat melanjutkan penerapan, pengujian, dan menjalankannya di lingkungan produksi. Perlu diingat bahwa untuk men-deploy ke lingkungan runtime Node.js 14 yang direkomendasikan, project Anda harus menggunakan paket harga Blaze . Lihat harga Cloud Functions .

Untuk menyelesaikan tutorial, terapkan fungsi Anda lalu jalankan addMessage() untuk memicu makeUppercase() .

  1. Jalankan perintah ini untuk menerapkan fungsi Anda:

     firebase deploy --only functions
     

    Setelah Anda menjalankan perintah ini, Firebase CLI akan menampilkan URL untuk setiap endpoint fungsi HTTP. Di terminal Anda, Anda akan melihat garis seperti berikut:

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

    URL berisi ID proyek Anda serta wilayah untuk fungsi HTTP. Meskipun Anda tidak perlu mengkhawatirkannya sekarang, beberapa fungsi HTTP produksi harus menentukan lokasi untuk meminimalkan latensi jaringan.

    Jika Anda mengalami kesalahan akses seperti "Tidak dapat mengotorisasi akses ke proyek", coba periksa aliasing proyek Anda.

  2. Menggunakan keluaran URL addMessage() oleh CLI, tambahkan parameter kueri teks, dan buka di browser:

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

    Fungsi mengeksekusi dan mengalihkan browser ke Firebase console di lokasi database tempat string teks disimpan. Peristiwa tulis ini memicu makeUppercase() , yang menulis versi huruf besar dari string.

Setelah menerapkan dan menjalankan fungsi, Anda dapat melihat log di Google Cloud Console . Jika Anda perlu menghapus fungsi dalam pengembangan atau produksi, gunakan Firebase CLI.

Dalam produksi, Anda mungkin ingin mengoptimalkan performa fungsi dan mengontrol biaya dengan menetapkan jumlah minimum dan maksimum instans yang akan dijalankan. Lihat Mengontrol perilaku penskalaan untuk informasi selengkapnya tentang opsi runtime ini.

Tinjau kode contoh lengkap

Berikut adalah functions/index.js yang telah selesai berisi fungsi addMessage() dan makeUppercase() . Fungsi ini memungkinkan Anda meneruskan parameter ke endpoint HTTP yang menulis nilai ke Cloud Firestore, lalu mengubahnya dengan huruf besar semua karakter dalam string.

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

Langkah selanjutnya

Dalam dokumentasi ini, Anda dapat menemukan informasi selengkapnya tentang konsep umum Cloud Functions serta panduan penulisan fungsi untuk menangani jenis peristiwa yang didukung oleh Cloud Functions.

Untuk mempelajari Cloud Functions lebih lanjut, Anda juga dapat melakukan hal berikut:

Video tutorial

Anda dapat mempelajari lebih lanjut Cloud Functions dengan menonton video tutorial. Dalam video ini, Anda akan menemukan panduan mendetail untuk memulai Cloud Functions, termasuk penyiapan Node.js dan CLI.

,

Untuk memulai Cloud Functions, coba pelajari tutorial ini, yang dimulai dengan tugas penyiapan yang diperlukan dan bekerja melalui pembuatan, pengujian, dan penerapan dua fungsi terkait:

  • addMessage() , yang menampilkan URL yang menerima nilai teks dan menuliskannya ke Cloud Firestore.
  • makeUppercase() , yang memicu penulisan di Cloud Firestore dan mengubah teks menjadi huruf besar.

Kami telah memilih Cloud Firestore dan fungsi JavaScript yang dipicu HTTP untuk contoh ini sebagian karena pemicu latar belakang ini dapat diuji secara menyeluruh melalui Firebase Local Emulator Suite . Toolset ini juga mendukung Realtime Database, PubSub, Auth, dan HTTP callable triggers. Jenis pemicu latar belakang lainnya seperti pemicu Remote Config, TestLab, dan Analytics semuanya dapat diuji secara interaktif menggunakan kumpulan alat yang tidak dijelaskan di halaman ini.

Bagian berikut dari tutorial ini merinci langkah-langkah yang diperlukan untuk membuat, menguji, dan menerapkan sampel. Jika Anda lebih suka menjalankan kode dan memeriksanya, lompat ke Review complete sample code .

Buat Proyek Firebase

  1. Di konsol Firebase , klik Tambahkan proyek .

    • Untuk menambahkan sumber daya Firebase ke proyek Google Cloud yang sudah ada , masukkan nama proyeknya atau pilih dari menu tarik-turun.

    • Untuk membuat proyek baru, masukkan nama proyek yang diinginkan. Secara opsional, Anda juga dapat mengedit ID proyek yang ditampilkan di bawah nama proyek.

  2. Jika diminta, tinjau dan setujui persyaratan Firebase .

  3. Klik Lanjutkan .

  4. (Opsional) Siapkan Google Analytics untuk proyek Anda, yang memungkinkan Anda mendapatkan pengalaman optimal menggunakan salah satu produk Firebase berikut:

    Pilih akun Google Analytics yang ada atau buat akun baru.

    Jika Anda membuat akun baru, pilih lokasi pelaporan Analytics , lalu setujui setelan berbagi data dan persyaratan Google Analytics untuk proyek Anda.

  5. Klik Create project (atau Add Firebase , jika Anda menggunakan project Google Cloud yang sudah ada).

Firebase secara otomatis menyediakan sumber daya untuk proyek Firebase Anda. Saat proses selesai, Anda akan dibawa ke halaman ikhtisar untuk proyek Firebase Anda di konsol Firebase.

Siapkan Node.js dan Firebase CLI

Anda memerlukan lingkungan Node.js untuk menulis fungsi, dan Anda memerlukan Firebase CLI untuk menerapkan fungsi ke runtime Cloud Functions. Untuk menginstal Node.js dan npm , Node Version Manager direkomendasikan.

Setelah Anda menginstal Node.js dan npm, instal Firebase CLI melalui metode pilihan Anda. Untuk menginstal CLI melalui npm, gunakan:

npm install -g firebase-tools

Ini menginstal perintah firebase yang tersedia secara global. Jika perintah gagal, Anda mungkin perlu mengubah npm permissions . Untuk memperbarui firebase-tools ke versi terbaru, jalankan kembali perintah yang sama.

Inisialisasi proyek Anda

Saat Anda menginisialisasi Firebase SDK untuk Cloud Functions, Anda membuat proyek kosong yang berisi dependensi dan beberapa kode contoh minimal, dan Anda memilih TypeScript atau JavaScript untuk menulis fungsi. Untuk keperluan tutorial ini, Anda juga perlu menginisialisasi Cloud Firestore.

Untuk menginisialisasi proyek Anda:

  1. Jalankan firebase login untuk masuk melalui browser dan mengautentikasi Firebase CLI.
  2. Buka direktori proyek Firebase Anda.
  3. Jalankan firebase init firestore . Untuk tutorial ini, Anda dapat menerima nilai default saat diminta untuk aturan Firestore dan file indeks. Jika Anda belum pernah menggunakan Cloud Firestore dalam project ini, Anda juga harus memilih mode awal dan lokasi untuk Firestore seperti yang dijelaskan dalam Memulai Cloud Firestore .
  4. Jalankan firebase init functions . CLI meminta Anda untuk memilih basis kode yang ada atau menginisialisasi dan memberi nama yang baru. Saat Anda baru memulai, satu basis kode di lokasi default sudah cukup; nanti, saat implementasi Anda meluas, Anda mungkin ingin mengatur fungsi dalam basis kode .
  5. CLI memberi Anda dua opsi untuk dukungan bahasa:

    Untuk tutorial ini, pilih JavaScript .

  6. CLI memberi Anda opsi untuk menginstal dependensi dengan npm. Aman untuk menolak jika Anda ingin mengelola dependensi dengan cara lain, meskipun jika Anda menolak, Anda harus menjalankan npm install sebelum meniru atau menggunakan fungsi Anda.

Setelah perintah ini berhasil diselesaikan, struktur proyek Anda terlihat seperti ini:

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

File package.json yang dibuat selama inisialisasi berisi kunci penting: "engines": {"node": "16"} . Ini menentukan versi Node.js Anda untuk menulis dan menerapkan fungsi. Anda dapat memilih versi lain yang didukung .

Impor modul yang diperlukan dan inisialisasi aplikasi

Setelah menyelesaikan tugas penyetelan, Anda dapat membuka direktori sumber dan mulai menambahkan kode seperti yang dijelaskan di bagian berikut. Untuk contoh ini, project Anda harus mengimpor modul Cloud Functions dan Admin SDK menggunakan pernyataan Node require . Tambahkan baris seperti berikut ke file index.js Anda:

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

Baris ini memuat firebase-functions dan firebase-admin , dan menginisialisasi instance aplikasi admin tempat perubahan Cloud Firestore dapat dilakukan. Di mana pun dukungan Admin SDK tersedia, seperti untuk FCM, Authentication, dan Firebase Realtime Database, dukungan ini menyediakan cara ampuh untuk mengintegrasikan Firebase menggunakan Cloud Functions.

Firebase CLI secara otomatis menginstal modul Firebase dan Firebase SDK untuk Cloud Functions Node saat Anda menginisialisasi proyek. Untuk menambahkan pustaka pihak ketiga ke proyek Anda, Anda dapat memodifikasi package.json dan menjalankan npm install . Untuk informasi selengkapnya, lihat Menangani Ketergantungan .

Tambahkan fungsi addMessage()

Untuk fungsi addMessage() , tambahkan baris berikut ke 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.`});
});

Fungsi addMessage() adalah titik akhir HTTP. Permintaan apa pun ke titik akhir menghasilkan objek Permintaan dan Respon bergaya ExpressJS diteruskan ke callback onRequest() .

Fungsi HTTP bersifat sinkron (mirip dengan fungsi yang dapat dipanggil ), jadi Anda harus mengirimkan respons secepat mungkin dan menunda pekerjaan menggunakan Cloud Firestore. Fungsi addMessage() HTTP meneruskan nilai teks ke titik akhir HTTP dan memasukkannya ke dalam database di bawah jalur /messages/:documentId/original .

Tambahkan fungsi makeUppercase()

Untuk fungsi makeUppercase() , tambahkan baris berikut ke 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});
    });

Fungsi makeUppercase() dijalankan saat Cloud Firestore ditulis. Fungsi ref.set menentukan dokumen yang akan didengarkan. Untuk alasan kinerja, Anda harus sespesifik mungkin.

Tanda kurung—misalnya, {documentId} —mengelilingi "parameter", karakter pengganti yang menampilkan data yang cocok di callback.

Cloud Firestore memicu callback onCreate() setiap kali pesan baru ditambahkan.

Fungsi yang digerakkan peristiwa seperti peristiwa Cloud Firestore bersifat asinkron. Fungsi callback harus mengembalikan null , Object, atau Promise . Jika Anda tidak mengembalikan apa pun, fungsi akan habis waktu, menandakan kesalahan, dan dicoba lagi. Lihat Sinkronisasi, Asinkron, dan Janji .

Emulasikan eksekusi fungsi Anda

Firebase Local Emulator Suite memungkinkan Anda membuat dan menguji aplikasi di mesin lokal Anda, bukan menerapkannya ke proyek Firebase. Pengujian lokal selama pengembangan sangat disarankan, sebagian karena menurunkan risiko kesalahan pengkodean yang berpotensi menimbulkan biaya dalam lingkungan produksi (misalnya, loop tak terbatas).

Untuk meniru fungsi Anda:

  1. Jalankan firebase emulators:start dan periksa output untuk URL UI Emulator Suite. Standarnya adalah localhost:4000 , tetapi mungkin dihosting di port lain di mesin Anda. Masukkan URL itu di browser Anda untuk membuka UI Emulator Suite.

  2. Periksa output firebase emulators:start perintah untuk URL fungsi HTTP addMessage() . Ini akan terlihat mirip dengan http://localhost:5001/MY_PROJECT/us-central1/addMessage , kecuali bahwa:

    1. MY_PROJECT akan diganti dengan ID proyek Anda.
    2. Port mungkin berbeda pada mesin lokal Anda.
  3. Tambahkan string kueri ?text=uppercaseme ke akhir URL fungsi. Ini akan terlihat seperti: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . Secara opsional, Anda dapat mengubah pesan "huruf besar" menjadi pesan khusus.

  4. Buat pesan baru dengan membuka URL di tab baru di browser Anda.

  5. Lihat efek fungsi di UI Emulator Suite:

    1. Di tab Log , Anda akan melihat log baru yang menunjukkan bahwa fungsi addMessage() dan makeUppercase() berjalan:

      i functions: Memulai eksekusi "addMessage"

      i functions: Memulai eksekusi "makeUppercase"

    2. Di tab Firestore , Anda akan melihat dokumen yang berisi pesan asli serta versi huruf besar dari pesan Anda (jika awalnya "huruf besar", Anda akan melihat "HURUF BESAR").

Men-deploy fungsi ke lingkungan produksi

Setelah fungsi Anda berfungsi seperti yang diinginkan di emulator, Anda dapat melanjutkan penerapan, pengujian, dan menjalankannya di lingkungan produksi. Perlu diingat bahwa untuk men-deploy ke lingkungan runtime Node.js 14 yang direkomendasikan, project Anda harus menggunakan paket harga Blaze . Lihat harga Cloud Functions .

Untuk menyelesaikan tutorial, terapkan fungsi Anda lalu jalankan addMessage() untuk memicu makeUppercase() .

  1. Jalankan perintah ini untuk menerapkan fungsi Anda:

     firebase deploy --only functions
     

    Setelah Anda menjalankan perintah ini, Firebase CLI akan menampilkan URL untuk setiap endpoint fungsi HTTP. Di terminal Anda, Anda akan melihat garis seperti berikut:

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

    URL berisi ID proyek Anda serta wilayah untuk fungsi HTTP. Meskipun Anda tidak perlu mengkhawatirkannya sekarang, beberapa fungsi HTTP produksi harus menentukan lokasi untuk meminimalkan latensi jaringan.

    Jika Anda mengalami kesalahan akses seperti "Tidak dapat mengotorisasi akses ke proyek", coba periksa aliasing proyek Anda.

  2. Menggunakan keluaran URL addMessage() oleh CLI, tambahkan parameter kueri teks, dan buka di browser:

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

    Fungsi mengeksekusi dan mengalihkan browser ke Firebase console di lokasi database tempat string teks disimpan. Peristiwa tulis ini memicu makeUppercase() , yang menulis versi huruf besar dari string.

Setelah menerapkan dan menjalankan fungsi, Anda dapat melihat log di Google Cloud Console . Jika Anda perlu menghapus fungsi dalam pengembangan atau produksi, gunakan Firebase CLI.

Dalam produksi, Anda mungkin ingin mengoptimalkan performa fungsi dan mengontrol biaya dengan menetapkan jumlah minimum dan maksimum instans yang akan dijalankan. Lihat Mengontrol perilaku penskalaan untuk informasi selengkapnya tentang opsi runtime ini.

Tinjau kode contoh lengkap

Berikut adalah functions/index.js yang telah selesai berisi fungsi addMessage() dan makeUppercase() . Fungsi ini memungkinkan Anda meneruskan parameter ke endpoint HTTP yang menulis nilai ke Cloud Firestore, lalu mengubahnya dengan huruf besar semua karakter dalam string.

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

Langkah selanjutnya

Dalam dokumentasi ini, Anda dapat menemukan informasi selengkapnya tentang konsep umum Cloud Functions serta panduan penulisan fungsi untuk menangani jenis peristiwa yang didukung oleh Cloud Functions.

Untuk mempelajari Cloud Functions lebih lanjut, Anda juga dapat melakukan hal berikut:

Video tutorial

Anda dapat mempelajari lebih lanjut Cloud Functions dengan menonton video tutorial. Dalam video ini, Anda akan menemukan panduan mendetail untuk memulai Cloud Functions, termasuk penyiapan Node.js dan CLI.