با توابع ابری، محتوای پویا را ارائه دهید و میکروسرویس ها را میزبانی کنید

Cloud Functions با Firebase Hosting جفت کنید تا محتوای پویا خود را تولید و ارائه دهید یا APIهای REST را به عنوان ریزسرویس بسازید.

Cloud Functions for Firebase به شما امکان می دهد تا به طور خودکار کدهای پشتیبان را در پاسخ به درخواست های HTTPS اجرا کنید. کد شما در فضای ابری گوگل ذخیره می شود و در یک محیط مدیریت شده اجرا می شود. نیازی به مدیریت و مقیاس بندی سرورهای خود نیست.

برای مثال از موارد و نمونه‌هایی برای Cloud Functions یکپارچه با Firebase Hosting استفاده کنید، از نمای کلی بدون سرور ما دیدن کنید.

Cloud Functions به Firebase Hosting متصل کنید

این بخش یک مثال کامل برای اتصال یک تابع به Firebase Hosting ارائه می دهد.

توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، می‌توانید به صورت اختیاری تنظیمات حافظه پنهان خود را تنظیم کنید.

مرحله 1: Cloud Functions را تنظیم کنید

  1. مطمئن شوید که آخرین نسخه Firebase CLI را دارید و Firebase Hosting را مقداردهی اولیه کرده اید.

    برای دستورالعمل های دقیق در مورد نصب CLI و مقداردهی اولیه Hosting ، به راهنمای شروع برای Hosting مراجعه کنید.

  2. مطمئن شوید که Cloud Functions را تنظیم کرده اید:

    • اگر قبلاً Cloud Functions راه‌اندازی کرده‌اید، می‌توانید به مرحله ۲ ادامه دهید: یک تابع HTTPS را ایجاد و آزمایش کنید .

    • اگر Cloud Functions را تنظیم نکرده اید:

      1. با اجرای دستور زیر از ریشه دایرکتوری پروژه خود Cloud Functions راه اندازی کنید:

        firebase init functions
      2. هنگامی که از شما خواسته شد، جاوا اسکریپت را انتخاب کنید (این مثال از JS استفاده می کند).

      3. بررسی کنید که یک دایرکتوری functions در دایرکتوری پروژه محلی خود دارید (که توسط فرمان Firebase ایجاد شده است). این دایرکتوری functions جایی است که کد مربوط به Cloud Functions زندگی می کند.

مرحله 2: یک تابع HTTPS را برای سایت Hosting خود ایجاد و آزمایش کنید

  1. /functions/index.js را در ویرایشگر مورد علاقه خود باز کنید.

  2. محتوای فایل را با کد زیر جایگزین کنید.

    این کد یک تابع HTTPS (به نام bigben ) ایجاد می کند که برای هر ساعت از روز به درخواست های HTTPS با BONG پاسخ می دهد، درست مانند ساعت.

    const functions = require('firebase-functions/v1');
    
    exports.bigben = functions.https.onRequest((req, res) => {
      const hours = (new Date().getHours() % 12) + 1  // London is UTC + 1hr;
      res.status(200).send(`<!doctype html>
        <head>
          <title>Time</title>
        </head>
        <body>
          ${'BONG '.repeat(hours)}
        </body>
      </html>`);
    });
    
  3. توابع خود را به صورت محلی با استفاده از Firebase Local Emulator Suite آزمایش کنید.

    1. از ریشه دایرکتوری پروژه محلی خود، دستور زیر را اجرا کنید:

      firebase emulators:start
    2. از طریق URL محلی بازگردانده شده توسط CLI به تابع دسترسی پیدا کنید، به عنوان مثال: http://localhost:5001/ PROJECT_ID /us-central1/bigben .

برای کسب اطلاعات بیشتر در مورد درخواست‌های HTTPS، از اسناد Cloud Functions دیدن کنید.

مرحله بعدی نحوه دسترسی به این تابع HTTPS از URL Firebase Hosting را راهنمایی می کند تا بتواند محتوای پویا برای سایت میزبان Firebase شما تولید کند.

مرحله 3: درخواست های HTTPS را به تابع خود هدایت کنید

با بازنویسی قوانین ، می‌توانید درخواست‌هایی را که با الگوهای خاص مطابقت دارند به یک مقصد هدایت کنید. مراحل زیر به شما نشان می دهد که چگونه تمام درخواست ها را از مسیر ../bigben در سایت Hosting خود هدایت کنید تا تابع bigben اجرا کنید.

  1. فایل firebase.json خود را باز کنید.

  2. تنظیمات rewrite زیر را در قسمت hosting اضافه کنید:

    "hosting": {
      // ...
    
      // Add the "rewrites" attribute within "hosting"
      "rewrites": [ {
        "source": "/bigben",
        "function": {
          "functionId": "bigben",
          "region": "us-central1"  // optional (see note below)
          "pinTag": true           // optional (see note below)
        }
      } ]
    }
    
  3. با آزمایش مجدد با شبیه سازهای Firebase، تأیید کنید که تغییر مسیر شما همانطور که انتظار می رود کار می کند.

    1. از ریشه دایرکتوری پروژه محلی خود، دستور زیر را اجرا کنید:

      firebase emulators:start
    2. از URL میزبانی شده محلی برای سایت خود که توسط CLI بازگردانده شده است (معمولا localhost:5000 ) بازدید کنید، اما URL را با bigben اضافه کنید، مانند: http://localhost:5000/bigben

  4. عملکرد خود و عملکرد آن را برای سایت خود تکرار کنید. از شبیه سازهای Firebase برای آزمایش این تکرارها استفاده کنید.

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

  • us-west1
  • us-central1
  • us-east1
  • europe-west1
  • asia-east1

برای جزئیات بیشتر در مورد قوانین بازنویسی، از صفحه پیکربندی Hosting بازدید کنید. همچنین می‌توانید با ترتیب اولویت پاسخ‌ها برای پیکربندی‌های مختلف Hosting آشنا شوید.

توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، می‌توانید به صورت اختیاری تنظیمات حافظه پنهان خود را تنظیم کنید.

مرحله 4: تابع خود را مستقر کنید

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

  1. با اجرای دستور زیر از ریشه دایرکتوری پروژه محلی خود، تابع و همچنین محتوای Hosting و پیکربندی خود را در سایت خود مستقر کنید:

    firebase deploy --only functions,hosting
  2. از آدرس های زیر به سایت زنده و عملکرد خود دسترسی داشته باشید:

    • زیر دامنه های Firebase شما:
      PROJECT_ID .web.app/bigben و PROJECT_ID .firebaseapp.com/bigben

    • هر دامنه سفارشی متصل:
      CUSTOM_DOMAIN /bigben

از یک چارچوب وب استفاده کنید

می‌توانید از چارچوب‌های وب، مانند Express.js ، در Cloud Functions استفاده کنید تا محتوای پویا برنامه‌تان را ارائه کنید و برنامه‌های پیچیده وب را راحت‌تر بنویسید.

بخش زیر یک مثال راهنما برای استفاده از Express.js با Firebase Hosting و Cloud Functions ارائه می دهد.

  1. با اجرای دستور زیر از پوشه functions خود Express.js را در پروژه محلی خود نصب کنید:

    npm install express --save
  2. فایل /functions/index.js خود را باز کنید، سپس Express.js را وارد و مقداردهی اولیه کنید:

    const functions = require('firebase-functions/v1');
    const express = require('express');
    const app = express();
  3. دو نقطه پایانی زیر را اضافه کنید:

    1. اولین نقطه پایانی را برای ارائه نمایه وب سایت ما در / اضافه کنید.

      app.get('/', (req, res) => {
        const date = new Date();
        const hours = (date.getHours() % 12) + 1;  // London is UTC + 1hr;
        res.send(`
          <!doctype html>
          <head>
            <title>Time</title>
            <link rel="stylesheet" href="/style.css">
            <script src="/script.js"></script>
          </head>
          <body>
            <p>In London, the clock strikes:
              <span id="bongs">${'BONG '.repeat(hours)}</span></p>
            <button onClick="refresh(this)">Refresh</button>
          </body>
        </html>`);
      });
      
    2. و یک نقطه پایانی دیگر برای برگرداندن تعداد BONG به عنوان یک API، در قالب JSON، تحت /api :

      app.get('/api', (req, res) => {
        const date = new Date();
        const hours = (date.getHours() % 12) + 1;  // London is UTC + 1hr;
        res.json({bongs: 'BONG '.repeat(hours)});
      });
      
  4. برنامه Express.js را به عنوان یک تابع HTTPS صادر کنید:

    exports.app = functions.https.onRequest(app);
  5. در فایل firebase.json خود، تمام درخواست ها را به تابع app هدایت کنید. این بازنویسی به Express.js اجازه می‌دهد تا مسیر فرعی مختلفی را که ما پیکربندی کرده‌ایم (در این مثال / و /api ) ارائه دهد.

    {
     "hosting": {
       // ...
    
       // Add the "rewrites" attribute within "hosting"
       "rewrites": [ {
         "source": "**",
         "function": "app"
       } ]
     }
    }

میان افزار اضافه کنید

در ادامه مثال ما، اکنون که از Express.js استفاده می کنید، می توانید میان افزار Express.js را به روش معمولی اضافه کنید. برای مثال، می‌توانید درخواست‌های CORS را در نقاط پایانی ما فعال کنید.

  1. با اجرای دستور زیر میان افزار cors را نصب کنید:

    npm install --save cors
  2. فایل /functions/index.js خود را باز کنید، سپس cors به برنامه Express.js خود اضافه کنید، مانند:

    const cors = require('cors')({origin: true});
    app.use(cors);

برای کسب اطلاعات بیشتر در مورد استفاده از Firebase با برنامه‌های Express و ماژول‌های میان‌افزار، از مستندات Cloud Functions دیدن کنید.

مراحل بعدی