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

شروع به کار: اولین توابع خود را بنویسید ، آزمایش کنید و به کار گیرید

برای شروع کار با عملکردهای ابری ، سعی کنید از طریق این آموزش کار کنید ، که با تنظیمات مورد نیاز شروع می شود و از طریق ایجاد ، آزمایش و استقرار دو عملکرد مرتبط کار می کند:

  • addMessage() ، که در معرض یک URL است که یک مقدار متن را می پذیرد و آن را به ابر Firestore می نویسد.
  • makeUppercase() ، که عوامل در ابر Firestore نوشتن و تبدیل متن به حروف بزرگ.

ما ابر Firestore و توابع جاوا اسکریپت HTTP-باعث برای این نمونه در بخش انتخاب کرده اید چرا که این محرک زمینه را می توان به طور کامل از طریق آزمایش فایربیس محلی شبیه ساز سوئیت . این مجموعه ابزار همچنین از محرک های قابل تماس Reatime Database ، PubSub ، Auth و HTTP پشتیبانی می کند. انواع دیگر از محرک های پس زمینه از قبیل راه دور پیکربندی، TestLab، و باعث تجزیه و تحلیل ترافیک همه را می توان تعاملی تست شده با استفاده از toolsets در این صفحه نشده است.

بخش های زیر این آموزش مراحل مورد نیاز برای ساخت ، آزمایش و استقرار نمونه را توضیح می دهد. اگر شما ترجیح می دهم فقط کد اجرا و بازرسی آن، پرش به نظر کد نمونه کامل .

ایجاد پروژه Firebase

  1. در فایربیس کنسول ، کلیک کنید اضافه کردن پروژه.

    • برای اضافه کردن منابع فایربیس به یک پروژه گوگل ابر موجود، نام پروژه خود را وارد کنید و یا آن را از منوی کشویی انتخاب کنید.

    • برای ایجاد یک پروژه جدید ، نام پروژه مورد نظر را وارد کنید. همچنین می توانید شناسه پروژه ای را که در زیر نام پروژه نشان داده شده است به صورت اختیاری ویرایش کنید.

  2. در صورت درخواست، بررسی و قبول شرایط فایربیس .

  3. روی ادامه کلیک کنید.

  4. (اختیاری) راهاندازی Google Analytics برای پروژه خود را، که شما را قادر به یک تجربه مطلوب با استفاده از هر یک از محصولات فایربیس زیر است:

    در هر دو صورت انتخاب یک موجود حساب Google Analytics یا برای ایجاد یک حساب کاربری جدید.

    اگر شما یک حساب جدید ایجاد کنید، انتخاب خود را تجزیه و تحلیل ترافیک گزارش موقعیت ، سپس تنظیمات اشتراک گذاری داده ها و اصطلاحات گوگل آنالیز برای پروژه خود قبول کنید.

  5. کلیک کنید ایجاد پروژه (یا اضافه کردن فایربیس، اگر شما با استفاده از یک پروژه گوگل ابر موجود).

Firebase به طور خودکار منابع پروژه Firebase شما را تأمین می کند. پس از اتمام فرآیند ، به صفحه نمای کلی پروژه Firebase خود در کنسول Firebase منتقل می شوید.

Node.js و Firebase CLI را تنظیم کنید

شما یک نیاز Node.js و محیط زیست را به توابع نوشتن، و شما فایربیس CLI به توابع استقرار نیاز به توابع ابر زمان اجرا. برای نصب Node.js و NPM ، گره نسخه مدیریت توصیه می شود.

هنگامی که شما Node.js و NPM نصب شده است، نصب فایربیس CLI به روش مورد نظر خود را. برای نصب CLI از طریق npm ، از موارد زیر استفاده کنید:

npm install -g firebase-tools

با این کار دستور firebase موجود در سراسر جهان نصب می شود. اگر فرمان می افتد، شما ممکن است نیاز به تغییر مجوز NPM . به روز رسانی به آخرین نسخه از firebase-tools ، دوباره همان دستور.

پروژه خود را اولیه کنید

وقتی Firebase SDK را برای عملکردهای ابری راه اندازی می کنید ، یک پروژه خالی حاوی وابستگی ها و حداقل کد نمونه ایجاد می کنید و TypeScript یا JavaScript را برای ایجاد توابع انتخاب می کنید. برای اهداف این آموزش ، شما همچنین باید Cloud Firestore را راه اندازی کنید.

برای راه اندازی اولیه پروژه خود:

  1. اجرا firebase login برای ورود از طریق مرورگر و تصدیق ابزار فایربیس.
  2. به فهرست پروژه Firebase خود بروید.
  3. اجرای firebase init firestore . برای این آموزش ، می توانید مقادیر پیش فرض را هنگام درخواست قوانین Firestore و فایل های فهرست بندی بپذیرید. اگر شما ابر Firestore در این پروژه استفاده نشده است، شما همچنین نیاز به انتخاب یک حالت شروع و محل سکونت برای Firestore همان طور که در کار با ابر Firestore آغاز شده .
  4. اجرای firebase init functions . این ابزار به شما امکان نصب وابستگی ها با npm را می دهد. این امن است به کاهش اگر شما می خواهید به مدیریت وابستگیها را در راه دیگری، هر چند اگر شما کاهش شما نیاز به اجرا npm install قبل از تقلید و یا استقرار توابع خود را.
  5. این ابزار دو گزینه برای پشتیبانی زبان به شما ارائه می دهد:

    برای این آموزش، جاوا اسکریپت را انتخاب کنید.

پس از موفقیت آمیز بودن این دستورات ، ساختار پروژه شما به این شکل است:

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 شما را برای نوشتن و استقرار توابع مشخص می کند. شما می توانید دیگر نسخه های پشتیبانی را انتخاب کنید .

ماژول های مورد نیاز را وارد کرده و یک برنامه را راه اندازی کنید

پس از انجام وظایف راه اندازی ، می توانید فهرست منبع را باز کرده و اضافه کردن کد را همانطور که در بخش های زیر توضیح داده شده است شروع کنید. برای این نمونه، پروژه خود را باید توابع ابر و ماژول های مدیریت SDK با استفاده از گره وارد require اظهارات. اضافه کردن خطوط مانند زیر به شما index.js فایل:

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

این خطوط بارگذاری firebase-functions و firebase-admin ماژول ها، و آماده سازی admin نمونه برنامه که از آن تغییرات ابر Firestore می تواند باشد. هر کجا که محیط مدیریت SDK پشتیبانی در دسترس است، به عنوان آن را برای FCM، احراز هویت و پایگاه فایربیس بیدرنگ است، آن را یک راه قدرتمند برای یکپارچه سازی فایربیس با استفاده از توابع ابر فراهم می کند.

هنگامی که پروژه خود را اولیه می کنید ، Firebase CLI به طور خودکار ماژول های Firebase و Firebase SDK for Cloud Functions Node را نصب می کند. برای اضافه کردن کتابخانه 3 حزب به پروژه خود، شما می توانید تغییر package.json و اجرا npm install . برای اطلاعات بیشتر، نگاه کنید به وابستگی دسته .

اضافه کردن addMessage() تابع

برای addMessage() تابع، برای اضافه کردن این خطوط 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.`});
});

addMessage() تابع یک HTTP نقطه پایانی است. هر گونه درخواست به نتایج نقطه پایانی در اکسپرس جیاس سبک درخواست پاسخ به و پاسخ : اعتراض به تصویب onRequest() پاسخ به تماس.

HTTP توابع همگام (شبیه به توابع قابل فراخوانی )، بنابراین شما باید پاسخ به سرعت به عنوان امکان پذیر کار و تسلیم با استفاده از ابر Firestore ارسال. addMessage() HTTP تابع یک مقدار متن به 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 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});
    });

makeUppercase() تابع را اجرا هنگامی که ابر Firestore به نوشته شده است. ref.set تابع سند را به گوش دادن به تعریف می کند. به دلایل عملکرد ، شما باید تا حد ممکن خاص باشید.

پرانتز برای مثال، {documentId} -surround "پارامترهای" نویسه عام که داده همسان خود را در پاسخ به تماس قرار دهد.

ابر Firestore باعث onWrite() پاسخ به تماس هر زمان که داده ها نوشته شده است و یا به روز شده در سند داده شده است.

توابع رویداد محور مانند رویدادهای Cloud Firestore ناهمزمان هستند. تابع callback باید یا بازگشت null ، یک شی و یا یک وعده . اگر چیزی را برنگردانید ، عملکرد منقضی می شود ، سیگنال خطا می دهد و دوباره امتحان می شود. مشاهده همگام سازی، async است، و وعده .

از عملکردهای خود الگوبرداری کنید

فایربیس محلی شبیه ساز سوئیت اجازه می دهد تا شما را به ساخت و برنامه های تست بر روی دستگاه محلی خود را به جای اعزام به یک پروژه فایربیس. آزمایش محلی در حین توسعه به شدت توصیه می شود ، تا حدی به این دلیل که خطر خطاهای برنامه نویسی را کاهش می دهد که به طور بالقوه می تواند در محیط تولید هزینه ایجاد کند (به عنوان مثال ، یک حلقه بی نهایت).

برای تقلید از عملکردهای خود:

  1. اجرای firebase emulators:start و بررسی خروجی برای URL از شبیه ساز سوئیت UI. این پیش فرض به localhost را: 4،000 ، اما ممکن است بر روی یک پورت مختلف بر روی دستگاه خود را به میزبانی. آن URL را در مرورگر خود وارد کنید تا رابط کاربری Emulator Suite باز شود.

  2. بررسی خروجی از firebase emulators:start دستور برای 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. با باز کردن نشانی اینترنتی در برگه جدید در مرورگر خود ، پیام جدیدی ایجاد کنید.

  5. مشاهده اثرات توابع در Emulator Suite UI:

    1. در برگه گزارش ها، شما باید سیاهههای مربوط جدید نشان می دهد دید که توابع addMessage() و makeUppercase() فرار:

      توابع i: شروع اجرای "addMessage"

      توابع i: شروع اجرای "makeUppercase"

    2. در تب Firestore، شما باید ببینید یک سند حاوی پیام اصلی خود را به عنوان نسخه uppercased پیام خود را (اگر آن را در اصل "uppercaseme"، شما "UPPERCASEME" را ببینید).

توابع را در محیط تولید قرار دهید

هنگامی که عملکردهای شما به صورت دلخواه در شبیه ساز کار می کنند ، می توانید به استقرار ، آزمایش و اجرای آنها در محیط تولید ادامه دهید. در نظر داشته باشید که برای استقرار به توصیه می شود از Node.js 14 محیط زمان اجرا نگه دارید، پروژه خود را باید در شود طرح قیمت گذاری فروغ . مشاهده ابر توابع قیمت گذاری .

برای تکمیل آموزش، استقرار توابع خود را و سپس اجرا addMessage() را به دنبال makeUppercase() .

  1. برای استقرار توابع خود این دستور را اجرا کنید:

    $ firebase deploy --only functions
    

    بعد از اجرای این دستور ، Firebase CLI آدرس URL هر نقطه پایانی عملکرد HTTP را نشان می دهد. در ترمینال خود ، باید خطی مانند زیر را ببینید:

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

    URL شامل شناسه پروژه شما و همچنین منطقه ای برای عملکرد HTTP است. اگرچه شما به نگرانی در مورد آن لازم نیست در حال حاضر، برخی از توابع HTTP تولید باید مشخص مکان برای به حداقل رساندن تاخیر شبکه.

    اگر خطاهای دسترسی به مانند شما روبرو می شوند "قادر به اجازه دسترسی به این پروژه،" بررسی کنید خود را aliasing به پروژه .

  2. با استفاده از addMessage() خروجی URL توسط CLI، اضافه کردن یک پارامتر جستجو متن، و باز کردن آن در یک مرورگر:

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

    این عملکرد مرورگر را در محل پایگاه داده ای که رشته متن در آن ذخیره شده است ، به کنسول Firebase هدایت و هدایت می کند. این رویداد ارسال باعث makeUppercase() ، که می نویسد از نسخه بزرگ از رشته است.

بعد از استقرار و اجرای توابع، شما می توانید سیاهههای مربوط در کنسول فایربیس برای توابع ابر نمایش . اگر شما نیاز به حذف توابع در توسعه و یا تولید، استفاده از فایربیس CLI.

در تولید ، ممکن است بخواهید با تنظیم حداقل و حداکثر تعداد نمونه برای اجرا ، عملکرد عملکرد را بهینه کرده و هزینه ها را کنترل کنید. مشاهده کنترل رفتار پوسته پوسته شدن برای اطلاعات بیشتر در این گزینه زمان اجرا.

نمونه کد کامل را مرور کنید

در اینجا به اتمام است functions/index.js که حاوی توابع addMessage() و makeUppercase() . این توابع به شما امکان می دهد یک پارامتر را به یک نقطه پایانی HTTP منتقل کنید که مقداری را در Cloud Firestore می نویسد و سپس با بزرگنمایی همه کاراکترهای رشته آن را تبدیل می کند.

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

مراحل بعدی

در این اسناد و مدارک، شما می توانید اطلاعات بیشتر را در مفاهیم کلی برای توابع ابر همچنین به عنوان راهنما برای نوشتن توابع مسئولیت رسیدگی به انواع رویداد پشتیبانی شده توسط توابع ابر.

برای کسب اطلاعات بیشتر در مورد عملکردهای ابر ، می توانید موارد زیر را نیز انجام دهید:

آموزش تصویری

با مشاهده آموزش های ویدئویی می توانید درباره عملکردهای ابری بیشتر بیاموزید. در این ویدئو ، راهنمایی های مفصلی در مورد شروع به کار با عملکردهای ابری ، از جمله Node.js و راه اندازی CLI ، خواهید یافت.