मैं निम्नलिखित के रूप में क्लाउड फ़ंक्शंस का उपयोग कर रहा हूं:

index.js (वर्तमान)

exports.addVehicle = functions.https.onRequest(async (req, res) => {
  cors(req, res, async () => {
    await require("./src/vehicles/addVehicle").addVehicle(req, res);
  });
});

AddVehicle.js (वर्तमान)

const admin = require("firebase-admin");
const Vehicle = require("../../models/Vehicle");

const app = admin.initializeApp();
const db = app.firestore();


exports.addVehicle = async (req, res) => {
  try{
    const vehicleInfo = new Vehicle(req.body);

    const addedVehicle = await db.collection("vehicles").add(vehicleInfo);
    console.log(addedVehicle);

    res.json({data: "Succesfully added vehicle"});
  }
  catch(err){
    if(err){
      res.json(err);
    }
  }
};

लेकिन इससे पहले कि मैं इसे पसंद कर रहा था

index.js (पिछला)

const app = admin.initializeApp();
const db = app.firestore();
const { addVehicle } = require("./src/vehicles/addVehicle");
exports.addVehicle = functions.https.onRequest(async (req, res) => {
      
  cors(req, res, async () => {
  await addVehicle(req, res, db);
  });
});

addVehicle.js (पिछला)

exports.addVehicle = async (req, res) => {
  try{
    const vehicleInfo = new Vehicle(req.body);

    const addedVehicle = await db.collection("vehicles").add(vehicleInfo);
    console.log(addedVehicle);

    res.json({data: "Succesfully added vehicle"});
  }
  catch(err){
    if(err){
      res.json(err);
    }
  }
};

संक्षेप में, पहले, मैं index.js के अंदर ऐप शुरू कर रहा था और डीबी को उन कार्यों के पैरामीटर के रूप में पास कर रहा था जिनकी मुझे सीधे आवश्यकता है और आह्वान करते हैं। लेकिन अब, मैं इंडेक्स फ़ाइल में ऐप को इनिशियलाइज़ नहीं कर रहा हूँ, बल्कि मैं हर अलग क्लाउड फंक्शन में ऐप को इनिशियलाइज़ करता हूँ, और साथ ही मुझे पहले से फाइलों की आवश्यकता नहीं है और इनवोक करना है, बल्कि दोनों की आवश्यकता है और उन्हें अंदर बुलाना है (फायरबेस इनिशियलाइज़ करने की अनुमति नहीं देता है) पिछली विधि के साथ अलग-अलग फाइलों में, लेकिन जब मुझे इसकी आवश्यकता होती है तो यह मुझे कई अलग-अलग फाइलों में ऐप को इनिशियलाइज़ करने की अनुमति देता है)।

वर्तमान संस्करण बहुत अधिक व्यवस्थित और साफ-सुथरा लगता है, लेकिन मेरा प्रश्न यह है कि यदि क्लाउड फ़ंक्शंस में कई बार इनिशियलाइज़ ऐप को कॉल करने का कोई अन्य डाउन या अपसाइड है? इसके अलावा, मुझे आश्चर्य है कि पहले यह अलग-अलग फाइलों में ऐप को इनिशियलाइज़ करने की अनुमति क्यों नहीं दे रहा था, लेकिन अब जब मुझे इसे सीधे फ़ंक्शन के अंदर की आवश्यकता होती है, तो यह अनुमति देता है?

0
Ahmet Yazici Student 30 अगस्त 2021, 22:40

1 उत्तर

सबसे बढ़िया उत्तर

आपको वैश्विक स्तर पर केवल एक बार initializeApp को कॉल करने की आवश्यकता है, और फिर इसे आपके सभी कार्यों के लिए प्रारंभ किया जाएगा। तो ऐसा करने का यह स्वीकृत तरीका है:

// index.js
const admin = require("firebase-admin")
// Other imports

admin.initializeApp()

// Your exports

इसके साथ, अब आप अन्य फाइलों में require("firebase-admin") कर सकते हैं और आपका डिफॉल्ट ऐप पहले से ही इनिशियलाइज़ हो जाएगा। और आपको db पास करने की जरूरत नहीं है। तो आपका पुराना addVehicle.js आम तौर पर स्वीकार किया जाएगा और इस तरह दिखेगा:

// addVehicle.js
const admin = require("firebase-admin")

export default async function addVehicle(req, res) {
  const db = admin.firestore()
  try{
    const vehicleInfo = new Vehicle(req.body);

    const addedVehicle = await db.collection("vehicles").add(vehicleInfo);
    console.log(addedVehicle);

    res.json({data: "Succesfully added vehicle"});
  }
  catch(err){
    if(err){
      res.json(err);
    }
  }
}

और फिर वापस अपनी अनुक्रमणिका में, आप पहले की तरह addVehicle.js आयात कर सकते हैं और इसे https फ़ंक्शन के रूप में निर्यात कर सकते हैं।

// index.js
const admin = require("firebase-admin")
const addVehicle = require("./vehicles/addVehicle")

// Other imports

admin.initializeApp()

exports.addVehicle = functions.https.onRequest(addVehicle);

// Other exports

आप इसे नए तरीके से कैसे कर रहे हैं, इसका नकारात्मक पक्ष - फ़ंक्शन के मुख्य भाग में फ़ाइलों की आवश्यकता होती है - यह है कि आप फ़ंक्शन को एक बार के बजाय हर बार फ़ंक्शन को लागू करने के लिए फ़ाइलों की आवश्यकता के द्वारा कठिन काम कर रहे हैं। आपका क्लाउड फ़ंक्शन चलता है। क्योंकि आपकी addVehicle फ़ाइल पर आपके फ़ंक्शन (और फायरबेस) की निर्भरता कभी नहीं बदलती है, आपको इसे केवल अपने फ़ंक्शन इंडेक्स की शुरुआत में एक बार लोड करने की आवश्यकता होती है।

इनलाइन आयात करने के लिए एक समय और स्थान है जैसे आप कर रहे हैं, लेकिन कोई लाभ नहीं है और कुछ प्रदर्शन समस्याएं हैं जो आप इसे नए तरीके से कर रहे हैं।

0
I'm Joe Too 31 अगस्त 2021, 03:48
मैं आपका बहुत-बहुत धन्यवाद देखता हूं। मुझे व्यवस्थापक ऑब्जेक्ट पर भी उपलब्ध फायरस्टोर विधि का एहसास नहीं हुआ, मैंने सोचा कि यह केवल ऐप ऑब्जेक्ट द्वारा ही पहुंच योग्य था इसलिए मुझे यह समस्या थी। फिर से धन्यवाद
 – 
Ahmet Yazici Student
31 अगस्त 2021, 20:01