Cloud Functions با Firebase Hosting جفت کنید تا محتوای پویا خود را تولید و ارائه دهید یا APIهای REST را به عنوان ریزسرویس بسازید.
Cloud Functions for Firebase به شما امکان می دهد تا به طور خودکار کدهای پشتیبان را در پاسخ به درخواست های HTTPS اجرا کنید. کد شما در فضای ابری گوگل ذخیره می شود و در یک محیط مدیریت شده اجرا می شود. نیازی به مدیریت و مقیاس بندی سرورهای خود نیست.
برای مثال از موارد و نمونههایی برای Cloud Functions یکپارچه با Firebase Hosting استفاده کنید، از نمای کلی بدون سرور ما دیدن کنید.
Cloud Functions به Firebase Hosting متصل کنید
این بخش یک مثال کامل برای اتصال یک تابع به Firebase Hosting ارائه می دهد.
توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، میتوانید به صورت اختیاری تنظیمات حافظه پنهان خود را تنظیم کنید.
مرحله 1: Cloud Functions تنظیم کنید
مطمئن شوید که آخرین نسخه Firebase CLI را دارید و Firebase Hosting مقداردهی اولیه کرده اید.
برای دستورالعمل های دقیق در مورد نصب CLI و مقداردهی اولیه Hosting ، به راهنمای شروع برای Hosting مراجعه کنید.
مطمئن شوید که Cloud Functions تنظیم کرده اید:
اگر قبلاً Cloud Functions تنظیم کردهاید، میتوانید به مرحله 2 ادامه دهید: یک تابع HTTPS را ایجاد و آزمایش کنید .
اگر Cloud Functions تنظیم نکرده اید:
با اجرای دستور زیر از ریشه دایرکتوری پروژه خود، Cloud Functions راه اندازی کنید:
firebase init functions
هنگامی که از شما خواسته شد، جاوا اسکریپت را انتخاب کنید (این مثال از JS استفاده می کند).
بررسی کنید که یک دایرکتوری
functions
در دایرکتوری پروژه محلی خود دارید (که توسط فرمان Firebase ایجاد شده است). این دایرکتوریfunctions
جایی است که کد مربوط به Cloud Functions زندگی می کند.
مرحله 2: یک تابع HTTPS را برای سایت Hosting خود ایجاد و آزمایش کنید
/functions/index.js
در ویرایشگر مورد علاقه خود باز کنید.محتوای فایل را با کد زیر جایگزین کنید.
این کد یک تابع 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>`); });
توابع خود را به صورت محلی با استفاده از Firebase Local Emulator Suite آزمایش کنید.
از ریشه دایرکتوری پروژه محلی خود، دستور زیر را اجرا کنید:
firebase emulators:start
از طریق URL محلی بازگردانده شده توسط CLI به تابع دسترسی پیدا کنید، به عنوان مثال:
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
برای کسب اطلاعات بیشتر در مورد درخواستهای HTTPS، از اسناد Cloud Functions دیدن کنید.
مرحله بعدی نحوه دسترسی به این تابع HTTPS از URL Firebase Hosting را راهنمایی می کند تا بتواند محتوای پویا برای سایت میزبان Firebase شما تولید کند.
مرحله 3: درخواست های HTTPS را به تابع خود هدایت کنید
با بازنویسی قوانین ، میتوانید درخواستهایی را که با الگوهای خاص مطابقت دارند به یک مقصد هدایت کنید. مراحل زیر به شما نشان می دهد که چگونه تمام درخواست ها را از مسیر ../bigben
در سایت Hosting خود هدایت کنید تا تابع bigben
را اجرا کنید.
فایل
firebase.json
خود را باز کنید.پیکربندی
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) } } ] }
با آزمایش مجدد با شبیه سازهای Firebase، تأیید کنید که تغییر مسیر شما همانطور که انتظار می رود کار می کند.
از ریشه دایرکتوری پروژه محلی خود، دستور زیر را اجرا کنید:
firebase emulators:start
از URL میزبانی شده محلی برای سایت خود که توسط CLI بازگردانده شده است (معمولا
localhost:5000
) بازدید کنید، اما URL را باbigben
اضافه کنید، مانند:http://localhost:5000/bigben
عملکرد خود و عملکرد آن را برای سایت خود تکرار کنید. از شبیه سازهای Firebase برای آزمایش این تکرارها استفاده کنید.
اگر
region
از یک بلوکfunction
پیکربندیhosting.rewrites
حذف شود، Firebase CLI تلاش میکند تا به طور خودکار منطقه را از کد منبع تابع شناسایی کند که در صورت نامشخص بودن، پیشفرضus-central1
است. اگر کد منبع تابع در دسترس نباشد، CLI سعی می کند منطقه را از تابع مستقر شده تشخیص دهد. اگر تابع در چندین منطقه باشد، CLI نیاز دارد کهregion
در پیکربندیhosting.rewrites
مشخص شود.
ویژگی
pinTag
فقط در Cloud Functions for Firebase (نسل دوم) موجود است. با استفاده از این ویژگی، می توانید اطمینان حاصل کنید که هر تابع برای تولید محتوای پویا سایت شما با منابع Hosting استاتیک و پیکربندی Hosting شما هماهنگ است. همچنین، این ویژگی به شما امکان میدهد بازنویسیهای خود را برای عملکردهای موجود در کانالهای پیشنمایش Hosting پیشنمایش کنید.اگر
"pinTag": true
را به یک بلوکfunction
hosting.rewrites
اضافه کنید، آنگاه تابع "پین" به همراه منابع و پیکربندی استاتیک Hosting شما مستقر میشود، حتی در هنگام اجرای. اگر نسخهای از سایت خود را به عقب برگردانید، عملکرد "پین" نیز بازگردانده میشود.
firebase deploy --only hosting این ویژگی به تگ های Cloud Run متکی است که دارای محدودیت 1000 برچسب در هر سرویس و 2000 برچسب در هر منطقه هستند. این بدان معناست که پس از صدها استقرار، قدیمیترین نسخههای یک سایت ممکن است از کار بیفتند.
برای بهترین عملکرد، با انتخاب یکی از مناطق زیر، توابع خود را با Hosting قرار دهید:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
برای جزئیات بیشتر در مورد قوانین بازنویسی، از صفحه پیکربندی Hosting بازدید کنید. همچنین میتوانید با ترتیب اولویت پاسخها برای پیکربندیهای مختلف Hosting آشنا شوید.
توجه داشته باشید که برای بهبود عملکرد ارائه محتوای پویا، میتوانید به صورت اختیاری تنظیمات حافظه پنهان خود را تنظیم کنید.
مرحله 4: تابع خود را مستقر کنید
هنگامی که عملکرد شما به صورت دلخواه در شبیه ساز کار می کند، می توانید به استقرار، آزمایش و اجرای آن با منابع واقعی پروژه ادامه دهید. این زمان خوبی برای در نظر گرفتن تنظیم گزینه های زمان اجرا برای کنترل رفتار مقیاس پذیری برای توابع در حال اجرا در تولید است.
با اجرای دستور زیر از ریشه دایرکتوری پروژه محلی خود، تابع و همچنین محتوای Hosting و پیکربندی خود را در سایت خود مستقر کنید:
firebase deploy --only functions,hosting
از آدرس های زیر به سایت زنده و عملکرد خود دسترسی داشته باشید:
زیر دامنه های Firebase شما:
PROJECT_ID .web.app/bigben
وPROJECT_ID .firebaseapp.com/bigben
هر دامنه سفارشی متصل:
CUSTOM_DOMAIN /bigben
از یک چارچوب وب استفاده کنید
میتوانید از چارچوبهای وب، مانند Express.js ، در Cloud Functions استفاده کنید تا محتوای پویا برنامهتان را ارائه کنید و برنامههای پیچیده وب را راحتتر بنویسید.
بخش زیر یک مثال راهنما برای استفاده از Express.js با Firebase Hosting و Cloud Functions ارائه می دهد.
با اجرای دستور زیر از پوشه
functions
خود Express.js را در پروژه محلی خود نصب کنید:npm install express --save
فایل
/functions/index.js
خود را باز کنید، سپس Express.js را وارد و مقداردهی اولیه کنید:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
دو نقطه پایانی زیر را اضافه کنید:
اولین نقطه پایانی را برای ارائه نمایه وب سایت ما در
/
اضافه کنید.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>`); });
و یک نقطه پایانی دیگر برای برگرداندن تعداد
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)}); });
برنامه Express.js را به عنوان یک تابع HTTPS صادر کنید:
exports.app = functions.https.onRequest(app);
در فایل
firebase.json
خود، تمام درخواست ها را به تابعapp
هدایت کنید. این بازنویسی به Express.js اجازه میدهد تا مسیر فرعی مختلفی را که ما پیکربندی کردهایم (در این مثال/
و/api
) ارائه دهد.{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
میان افزار اضافه کنید
در ادامه مثال ما، اکنون که از Express.js استفاده می کنید، می توانید میان افزار Express.js را به روش معمولی اضافه کنید. به عنوان مثال، می توانید درخواست های CORS را در نقاط پایانی ما فعال کنید.
با اجرای دستور زیر میان افزار
cors
را نصب کنید:npm install --save cors
فایل
/functions/index.js
خود را باز کنید، سپسcors
به برنامه Express.js خود اضافه کنید، مانند:const cors = require('cors')({origin: true}); app.use(cors);
برای کسب اطلاعات بیشتر در مورد استفاده از Firebase با برنامههای Express و ماژولهای میانافزار، از مستندات Cloud Functions دیدن کنید.
مراحل بعدی
با سایر سرویسهای Firebase با استفاده از Firebase Admin SDK تعامل داشته باشید.
قیمت گذاری و سهمیه ها و محدودیت های Cloud Functions را مرور کنید.