חבר פונקציות ענן עם Firebase Hosting כדי ליצור ולהגיש את התוכן הדינמי שלך או לבנות ממשקי API של REST כשירותי מיקרו.
Cloud Functions for Firebase מאפשר לך להריץ קוד backend באופן אוטומטי בתגובה לבקשות HTTPS. הקוד שלך מאוחסן בענן של גוגל ופועל בסביבה מנוהלת. אין צורך לנהל ולהרחיב את השרתים שלך.
לדוגמה, שימוש במקרים ודוגמאות עבור פונקציות ענן המשולבות ב-Firebase Hosting, בקר בסקירה הכללית שלנו ללא שרת .
חבר את פונקציות הענן ל-Firebase Hosting
סעיף זה מספק דוגמה מפורטת לחיבור פונקציה ל-Firebase Hosting.
שים לב שכדי לשפר את הביצועים של הגשת תוכן דינמי, אתה יכול לכוון את הגדרות המטמון שלך.
שלב 1: הגדר פונקציות ענן
ודא שיש לך את הגרסה העדכנית ביותר של Firebase CLI ושאתחלת את Firebase Hosting.
להנחיות מפורטות לגבי התקנת ה-CLI ואתחול האחסון, עיין במדריך התחל לאירוח .
ודא שהגדרת פונקציות ענן:
אם כבר הגדרת פונקציות ענן, תוכל להמשיך לשלב 2: צור ובדוק פונקציית HTTPS .
אם לא הגדרת פונקציות ענן:
אתחול פונקציות ענן על ידי הפעלת הפקודה הבאה מהשורש של ספריית הפרויקט שלך:
firebase init functions
כשתתבקש, בחר JavaScript (דוגמה זו משתמשת ב-JS).
בדוק שיש לך ספריית
functions
בספריית הפרויקט המקומית שלך (שנוצרה על ידי פקודת Firebase שהרצת זה עתה). ספרייתfunctions
הזו היא המקום שבו נמצא הקוד עבור פונקציות ענן.
שלב 2: צור ובדוק פונקציית HTTPS עבור אתר האירוח שלך
פתח את
/functions/index.js
בעורך המועדף עליך.החלף את תוכן הקובץ בקוד הבא.
קוד זה יוצר פונקציית HTTPS (ששמה
bigben
) המגיבה לבקשות HTTPS עםBONG
עבור כל שעה ביום, ממש כמו שעון.const functions = require('firebase-functions'); 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
גש לפונקציה באמצעות כתובת האתר המקומית המוחזרת על ידי ה-CLI, לדוגמה:
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
בקר בתיעוד של Cloud Functions כדי ללמוד עוד על בקשות HTTPS.
השלב הבא ידריך אותך כיצד לגשת לפונקציית HTTPS זו מכתובת אתר לאירוח של Firebase , כך שתוכל ליצור תוכן דינמי עבור האתר שלך שמתארח ב-Firebase.
שלב 3: הפנה בקשות HTTPS לפונקציה שלך
עם כללי כתיבה מחדש , אתה יכול להפנות בקשות התואמות דפוסים ספציפיים ליעד יחיד. השלבים הבאים מראים לך כיצד להפנות את כל הבקשות מהנתיב ../bigben
באתר האחסון שלך כדי לבצע את פונקציית 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
בקר בכתובת האתר המתארחת מקומית של האתר שלך כפי שהוחזרה על ידי ה-CLI (בדרך כלל
localhost:5000
), אך הוסף את כתובת האתר עםbigben
, כך:http://localhost:5000/bigben
חזור על הפונקציה שלך והפונקציונליות שלה עבור האתר שלך. השתמש באמולטורים של Firebase כדי לבדוק את האיטרציות האלה.
אם
region
מושמט מבלוקfunction
של ה-hosting.rewrites
config, Firebase CLI מנסה לזהות אוטומטית את האזור מקוד המקור של הפונקציה, שאם לא מצוין, ברירת המחדל היאus-central1
. אם קוד המקור של הפונקציה אינו זמין, ה-CLI מנסה לזהות את האזור מהפונקציה שנפרסה. אם הפונקציה נמצאת במספר אזורים, ה-CLI מחייב לצייןregion
בתצורתhosting.rewrites
.
תכונת
pinTag
זמינה רק ב-Cloud Functions for Firebase (דור שני). עם תכונה זו, אתה יכול להבטיח שכל פונקציה להפקת התוכן הדינמי של האתר שלך תישמר מסונכרנת עם משאבי האחסון הסטטיים ותצורת האחסון שלך. כמו כן, תכונה זו מאפשרת לך לצפות בתצוגה מקדימה של השכתובים שלך לפונקציות בערוצי תצוגה מקדימה של אירוח.אם תוסיף את
"pinTag": true
לבלוקfunction
של ה-hosting.rewrites
config, אז הפונקציה "pinned" תפרוס יחד עם משאבי אירוח ותצורה סטטיים שלך, גם בעת הפעלת. אם תחזיר גרסה של האתר שלך לאחור, הפונקציה ה"מוצמדת" תבוטל גם היא.
firebase deploy --only hosting תכונה זו מסתמכת על תגי Cloud Run , שיש להם מגבלה של 1000 תגים לשירות ו-2000 תגים לכל אזור. המשמעות היא שאחרי מאות פריסות, הגרסאות הישנות ביותר של אתר עשויות להפסיק לעבוד.
לקבלת הביצועים הטובים ביותר, אתר את הפונקציות שלך יחד עם אירוח על ידי בחירה באחד מהאזורים הבאים:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
בקר בדף תצורת אירוח לפרטים נוספים על כללי כתיבה מחדש . אתה יכול גם ללמוד על סדר העדיפות של התגובות עבור תצורות אירוח שונות.
שים לב שכדי לשפר את הביצועים של הגשת תוכן דינמי, אתה יכול לכוון את הגדרות המטמון שלך.
שלב 4: פרוס את הפונקציה שלך
ברגע שהפונקציה שלך פועלת כרצונך באמולטור, תוכל להמשיך לפריסה, בדיקה והרצה עם משאבי פרויקט אמיתיים . זה זמן טוב לשקול הגדרת אפשרויות זמן ריצה כדי לשלוט בהתנהגות קנה המידה של פונקציות הפועלות בייצור.
פרוס את הפונקציה שלך כמו גם את תוכן האירוח שלך ותצורה לאתר שלך על ידי הפעלת הפקודה הבאה מהשורש של ספריית הפרויקט המקומית שלך:
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.
התקן את Express.js בפרויקט המקומי שלך על ידי הפעלת הפקודה הבאה מספריית
functions
שלך:npm install express --save
פתח את הקובץ
/functions/index.js
שלך, ולאחר מכן ייבא ואתחל את Express.js:const functions = require('firebase-functions'); 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 ומודולי תוכנת ביניים.
הצעדים הבאים
הגדר שמירה במטמון עבור התוכן הדינמי שלך ב-CDN גלובלי.
צור אינטראקציה עם שירותי Firebase אחרים באמצעות Firebase Admin SDK .
סקור את התמחור ואת המכסות והמגבלות עבור פונקציות ענן.