अपने डाइनैमिक कॉन्टेंट को जनरेट और डिलीवर करने के लिए, Cloud Functions को Firebase Hosting के साथ पेयर करें. इसके अलावा, माइक्रोसेवाओं के तौर पर REST API बनाएं.
Cloud Functions for Firebase की मदद से, एचटीटीपीएस अनुरोधों के जवाब में बैकएंड कोड को अपने-आप चलाया जा सकता है. आपका कोड, Google के क्लाउड में सेव होता है और मैनेज किए जा रहे एनवायरमेंट में चलता है. आपको अपने सर्वर मैनेज करने और उन्हें स्केल करने की ज़रूरत नहीं होती.
Firebase Hosting के साथ इंटिग्रेट किए गए Cloud Functions के इस्तेमाल के उदाहरण और सैंपल देखने के लिए, सर्वरलेस की खास जानकारी पर जाएं.
Cloud Functions को Firebase Hosting से कनेक्ट करना
इस सेक्शन में, किसी फ़ंक्शन को Firebase Hosting से कनेक्ट करने का उदाहरण दिया गया है.
ध्यान दें कि डाइनैमिक कॉन्टेंट दिखाने की परफ़ॉर्मेंस को बेहतर बनाने के लिए, कैश मेमोरी की सेटिंग को अपनी ज़रूरत के हिसाब से बदला जा सकता है.
पहला चरण: Cloud Functions सेट अप करना
पक्का करें कि आपके पास Firebase CLI का सबसे नया वर्शन हो और आपने Firebase Hosting को शुरू किया हो.
सीएलआई इंस्टॉल करने और Hosting को शुरू करने के बारे में ज़्यादा जानकारी के लिए, Hosting को इस्तेमाल करने से जुड़ी गाइड देखें.
पक्का करें कि आपने Cloud Functions सेट अप किया हो:
अगर आपने Cloud Functions को पहले से सेट अप किया हुआ है, तो दूसरा चरण: एचटीटीपीएस फ़ंक्शन बनाएं और उसकी जांच करें पर जाएं.
अगर आपने Cloud Functions सेट अप नहीं किया है, तो:
Cloud Functions को शुरू करने के लिए, अपने प्रोजेक्ट डायरेक्ट्री के रूट से यह कमांड चलाएं:
firebase init functions
जब आपसे कहा जाए, तब JavaScript चुनें. इस उदाहरण में JS का इस्तेमाल किया गया है.
देखें कि आपके लोकल प्रोजेक्ट डायरेक्ट्री में
functionsडायरेक्ट्री मौजूद हो. यह डायरेक्ट्री, अभी-अभी चलाई गई Firebase कमांड से बनाई जाती है. इसfunctionsडायरेक्ट्री में, Cloud Functions का कोड होता है.
दूसरा चरण: अपनी Hosting साइट के लिए, एचटीटीपीएस फ़ंक्शन बनाएं और उसकी जांच करें
/functions/index.jsको अपने पसंदीदा एडिटर में खोलें.फ़ाइल के कॉन्टेंट को इस कोड से बदलें.
इस कोड से एक एचटीटीपीएस फ़ंक्शन (
bigbenनाम वाला) बनाया जाता है. यह फ़ंक्शन, एचटीटीपीएस अनुरोधों का जवाब देता है. इसमें दिन के हर घंटे के लिए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
सीएलआई से मिले लोकल यूआरएल के ज़रिए फ़ंक्शन को ऐक्सेस करें. उदाहरण के लिए:
.http://localhost:5001/PROJECT_ID/us-central1/bigben
एचटीटीपीएस अनुरोधों के बारे में ज़्यादा जानने के लिए, Cloud Functions दस्तावेज़ पढ़ें.
अगले चरण में, आपको Firebase Hosting यूआरएल से इस एचटीटीपीएस फ़ंक्शन को ऐक्सेस करने का तरीका बताया गया है, ताकि यह Firebase पर होस्ट की गई आपकी साइट के लिए डाइनैमिक कॉन्टेंट जनरेट कर सके.
तीसरा चरण: अपने फ़ंक्शन को सीधे तौर पर एचटीटीपीएस अनुरोध भेजना
फिर से लिखने के नियमों की मदद से, खास पैटर्न से मेल खाने वाले अनुरोधों को एक ही डेस्टिनेशन पर भेजा जा सकता है. यहां दिए गए चरणों में बताया गया है कि अपनी Hosting साइट पर, ../bigben पाथ से आने वाले सभी अनुरोधों को bigben फ़ंक्शन को लागू करने के लिए कैसे डायरेक्ट किया जाता है.
अपनी
firebase.jsonफ़ाइल खोलें.hostingसेक्शन में जाकर, यहrewriteकॉन्फ़िगरेशन जोड़ें:"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 Emulator की मदद से फिर से टेस्ट करें.
अपने लोकल प्रोजेक्ट डायरेक्ट्री के रूट से, यह कमांड चलाएं:
firebase emulators:start
अपनी साइट के लिए, स्थानीय तौर पर होस्ट किए गए उस यूआरएल पर जाएं जो सीएलआई ने दिखाया है. आम तौर पर, यह
localhost:5000होता है. हालांकि, यूआरएल मेंbigbenजोड़ें. जैसे:http://localhost:5000/bigben
अपनी साइट के लिए, फ़ंक्शन और उसके काम करने के तरीके को बेहतर बनाएं. इन वर्शन की जांच करने के लिए, Firebase एम्युलेटर का इस्तेमाल करें.
बेहतर परफ़ॉर्मेंस के लिए, अपने फ़ंक्शन को Hosting के साथ एक ही जगह पर रखें. इसके लिए, इनमें से कोई एक क्षेत्र चुनें:
us-west1us-central1us-east1europe-west1asia-east1
रीराइट करने के नियमों के बारे में ज़्यादा जानकारी पाने के लिए, Hosting कॉन्फ़िगरेशन पेज पर जाएं. अलग-अलग Hosting कॉन्फ़िगरेशन के लिए, जवाबों के प्राथमिकता क्रम के बारे में भी जानें.
ध्यान दें कि डाइनैमिक कॉन्टेंट दिखाने की परफ़ॉर्मेंस को बेहतर बनाने के लिए, कैश मेमोरी की सेटिंग को अपनी ज़रूरत के हिसाब से बदला जा सकता है.
चौथा चरण: फ़ंक्शन को डिप्लॉय करना
जब आपका फ़ंक्शन एम्युलेटर में आपकी ज़रूरत के मुताबिक काम करने लगे, तब उसे डिप्लॉय किया जा सकता है. इसके बाद, असली प्रोजेक्ट के संसाधनों के साथ उसकी जांच की जा सकती है और उसे चलाया जा सकता है. यह प्रोडक्शन में चल रहे फ़ंक्शन के लिए, रनटाइम के विकल्प सेट करने का सही समय है. इससे स्केलिंग के व्यवहार को कंट्रोल किया जा सकता है.
अपने फ़ंक्शन के साथ-साथ Hosting कॉन्टेंट और कॉन्फ़िगरेशन को अपनी साइट पर डिप्लॉय करें. इसके लिए, अपने लोकल प्रोजेक्ट की रूट डायरेक्ट्री से यह कमांड चलाएं:
firebase deploy --only functions,hosting
इन यूआरएल पर जाकर, अपनी लाइव साइट और फ़ंक्शन को ऐक्सेस करें:
आपके Firebase सबडोमेन:
PROJECT_ID.web.app/bigbenऔरPROJECT_ID.firebaseapp.com/bigbenकनेक्ट किए गए कस्टम डोमेन:
CUSTOM_DOMAIN/bigben
वेब फ़्रेमवर्क का इस्तेमाल करना
Cloud Functions में, Express.js जैसे वेब फ़्रेमवर्क का इस्तेमाल किया जा सकता है. इससे, अपने ऐप्लिकेशन के डाइनैमिक कॉन्टेंट को दिखाया जा सकता है. साथ ही, जटिल वेब ऐप्लिकेशन को ज़्यादा आसानी से लिखा जा सकता है.
इस सेक्शन में, Firebase Hosting और Cloud Functions के साथ Express.js का इस्तेमाल करने का उदाहरण दिया गया है.
अपनी
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की संख्या को एपीआई के तौर पर दिखाने के लिए एक और एंडपॉइंट. यह संख्या, 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 ऐप्लिकेशन को एचटीटीपीएस फ़ंक्शन के तौर पर एक्सपोर्ट करें:
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मिडलवेयर को इंस्टॉल करने के लिए, यह कमांड चलाएं:npm install --save cors
अपनी
/functions/index.jsफ़ाइल खोलें. इसके बाद, अपने Express.js ऐप्लिकेशन मेंcorsजोड़ें. जैसे:const cors = require('cors')({origin: true}); app.use(cors);
Express ऐप्लिकेशन और मिडलवेयर मॉड्यूल के साथ Firebase का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Cloud Functions दस्तावेज़ पढ़ें.
अगले चरण
ग्लोबल सीडीएन पर अपने डाइनैमिक कॉन्टेंट के लिए, कैशिंग सेट अप करें.
Firebase Admin SDK का इस्तेमाल करके, Firebase की अन्य सेवाओं के साथ इंटरैक्ट करें.
Cloud Functions के लिए, कीमत और कोटा और सीमाएं देखें.