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

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 در آن قرار دارد.

مرحله ۲: یک تابع 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 خود تولید کنید.

مرحله ۳: درخواست‌های 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 اطلاعات کسب کنید.

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

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

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

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

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

    • زیر دامنه‌های فایربیس شما:
      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 مراجعه کنید.

مراحل بعدی