2017-06-09 16 views
5

मेरे पास एक पीडब्ल्यूए है जो पॉलिमर 2.0 और पॉलिमरफायर का उपयोग करके बनाया गया है और यह मेरा वेब एप्लीकेशन है। मेरे पास एक क्लाउड फ़ंक्शन (माइक्रोस्कोप) के रूप में कार्य करने वाला एक एक्सप्रेस ऐप है। उदाहरण: exports.register=functions.https.onRequest(app);क्लाउड फ़ंक्शंस के कुछ अनुरोधों को रूट करने के लिए फ़ायरबेस-होस्टिंग के अंदर पुनर्लेखन नियमों को कॉन्फ़िगर कैसे करें?

पुनर्लेखन नियम कैसे जोड़ने के लिए /fns/register और /fns/verify कहना ऊपर एप्लिकेशन register को मैप करने के।

मैंने क्लाउडफंक्शन माइक्रोस्कोप प्रोजेक्ट में अपनी firebase.json फ़ाइल अपडेट की है, लेकिन जब मैं firebase deploy --only functions:register चलाता हूं तो यह कहता है कि होस्टिंग कॉन्फ़िगरेशन को तैनात करने के लिए कोई सार्वजनिक फ़ोल्डर नहीं है!

{ 
    "hosting": { 
     "rewrites": [{ 
      "source": "/fns/**", "function": "register" 
     }] 
    }  
} 

मूल वेब applicaiton में फिर से लिखने के नियम को बनाए रखने के एक विकल्प हो सकता है, लेकिन फिर भी, आदर्श IMHO नहीं है। अगर मुझे इसे अपने मूल वेब एप्लिकेशन में करना है, तो मैंने भी कोशिश की, लेकिन इसे नहीं बनाया जा सका। पीछा कर रहा है मेरी अपने मूल वेब अनुप्रयोग में firebase.json अद्यतन:

{ 
    "database": { 
    "rules": "database.rules.json" 
    }, 
    "hosting": { 
    "public": "build/default/public", 
    "rewrites": [ 
     { 
     "source": "/fns/**", 
     "function": "register" 
     }, 
     { 
     "source": "**", 
     "destination": "/index.html" 
     } 
    ] 
    } 
} 

उत्तर

9

सभी संसाधनों (होस्टिंग, कार्य और डेटाबेस) के लिए सिर्फ एक परियोजना को बनाए रखने के लिए आदर्श है, मुझे लगता है कि Firebase परियोजनाओं का प्रबंधन करने के लिए सही तरीका है।

आप होस्टिंग सेवा के केवल एक पैरामीटर (रीराइट्स) को बदलने की कोशिश कर रहे हैं, और यह वैसे ही काम नहीं करता है। जब आप firebase.json को तैनात करते हैं, तो अन्य सभी कॉन्फ़िगरेशन ओवरराइट किए जाते हैं। इसलिए, आपको मिली त्रुटि इसलिए है क्योंकि फ़ायरबेस अंतिम कॉन्फ़िगरेशन फ़ाइल नहीं देखता है और यह जांचने के लिए अलग-अलग है कि यह सभी अंतिम कॉन्फ़िगरेशन फ़ाइल को ओवरराइट करने का प्रयास करता है और त्रुटि प्राप्त करता है क्योंकि "सार्वजनिक" होस्टिंग के लिए एक आवश्यक पैरामीटर है।

यह समझाया गया है कि अब आप उम्मीद कर रहे हैं कि फायरबेस /fns/register को केवल /register पर फिर से लिखता है, लेकिन ऐसा नहीं होगा। आपका फ़ंक्शन "पूर्ण" यूआरएल /fns/register प्राप्त करेगा।

सबसे अच्छा तरीका है, मुझे लगता है, एक रूट मार्ग बनाने के लिए है:

var functions = require('firebase-functions'); 
var express = require('express'); 

var app = express(); 
var router = express.Router(); 

router.post('/register', registerFunction); 
router.post('/verify', verifyFunction); 

app.use('/fns', router); 

exports.fns = functions.https.onRequest(app); 

और fns कार्य करने के लिए सभी कार्यों का पुनर्लेखन:

{ 
    "database": { 
    "rules": "database.rules.json" 
    }, 
    "hosting": { 
    "public": "build/default/public", 
    "rewrites": [ 
     { 
     "source": "/fns/**", 
     "function": "fns" 
     }, 
     { 
     "source": "**", 
     "destination": "/index.html" 
     } 
    ] 
    } 
} 

अब आप उपयोग कर सकते हैं अपने रजिस्टर समारोह तक पहुँचने के लिए और https://<your-project-id>.firebaseapp.com/fns/verify अपने सत्यापन फ़ंक्शन तक पहुंचने के लिए।

+0

उत्तर के लिए @Marcos V धन्यवाद। लेकिन Google आईओ 2017 से निरंतर सुझाव माइक्रोस्कोप के लिए जाना है। इसलिए सिर्फ एक परियोजना होने के नाते वास्तव में एक अच्छा समाधान नहीं है जिसे मैं ढूंढ रहा हूं। मैं अपनी चपलता, स्केलेबिलिटी और त्रुटियों के स्थानीयकरण के लिए माइक्रोस्कोप शैली शुरू करना चाहता हूं। इसलिए मैं आपका जवाब स्वीकार नहीं कर सका। – Phani

+0

@Phani आपके प्रश्न का शीर्षक अलग-अलग परियोजनाओं के लिए आवश्यकता का जिक्र नहीं करता है। हो सकता है कि आप इस उत्तर को स्वीकार कर सकें (जो आपके मुख्य प्रश्न का उत्तर देता है) और अलग-अलग परियोजनाओं में पुनर्लेखन नियमों और कार्यों को बनाए रखने में सक्षम होने के बारे में एक और प्रश्न खोलें? – Motin

+0

मैं इसे @Motin समाधान के रूप में स्वीकार नहीं कर सकता क्योंकि एक परियोजना में सभी होस्टिंग, फ़ंक्शंस और डेटाबेस को बनाए रखना माइक्रोस्कोस दुनिया में आदर्श नहीं है। मैं यह स्वीकार करने के लिए ठीक हूं कि होस्टिंग फ़ाइल केवल एक मुख्य परियोजना में हो सकती है (हालांकि आदर्श नहीं है)। लेकिन कार्य किसी भी अन्य परियोजनाओं में हो सकते हैं और डेटाबेस एक और परियोजना में पूरी तरह से हो सकता है। यह एक माइक्रोसाइवेयर का दृष्टिकोण है और मैं इसे पहले से ही पालन कर रहा हूं। – Phani

0

यह सवाल पहले से ही यहाँ Firebase Hosting with dynamic cloud functions rewrites

मैं आपसे सहमत हूँ कि यह सबसे अच्छा है एक अलग से एक में एक परियोजना में स्पा और microservice रखने के लिए लेकिन @Marcos एक रूट समारोह

उपयोग के बारे में अपनी सही वी उत्तर दिया जाता है
0

मैंने मार्कोस वी के उत्तर के लिए वोट दिया है लेकिन मैं वास्तव में इसे उत्तर के रूप में स्वीकार नहीं कर सकता। मुख्य रूप से क्योंकि माइक्रोस्कोप दुनिया में आप एक ही स्थान पर सभी कार्यक्षमताओं के साथ एक मोनोलिथ नहीं बनाएंगे। आप बजाय प्रबंधनीय हिस्सों में तोड़ेंगे और आवेदन के लिए जरूरी/उचित के रूप में कई उपयुक्त माइक्रोस्कोपिस बनाएंगे।

फ़ायरबेस-होस्टिंग के साथ वर्तमान सेट-अप के साथ, आपके पास एक प्रोजेक्ट में होस्ट कॉन्फ़िगरेशन फ़ाइल होना चाहिए। साथ ही, होस्टिंग एक प्रोजेक्ट में होगा क्योंकि आपकी साइट से संबंधित सभी एचटीएमएल, जेएस, सीएसएस में अंतर-निर्भरता होगी और इसलिए अविभाज्य (कम से कम अब तक) हैं।

जबकि क्लाउड फ़ंक्शंस को एक निश्चित उद्देश्य की सेवा करने वाले सूक्ष्मदर्शी के रूप में बेहतर समझा जाता है और इसलिए आवश्यकतानुसार अलग परियोजना/माइक्रोस्कोस में होना आवश्यक है। firebase deploy --only functions:YOUR_FN_NAME

के साथ आसानी से तैनात किया जा सकता है जब भी आपको नए क्लाउड फ़ंक्शंस माइक्रोस्कोस के लिए मैपिंग जोड़ने की आवश्यकता होती है, आगे बढ़ें और मुख्य होस्टिंग एप्लिकेशन में रूटिंग परिवर्तन करें और इसे तैनात करें। इस दृष्टिकोण के साथ, हम कम से कम बैक एंड भाग माइक्रोस्कोप होने जा सकते हैं।

अब एक ही होस्टिंग एप्लिकेशन या डेटाबेस में डेटाबेस नियमों को बनाए रखना उन डिजाइनरों को छोड़ दिया गया है जो उनके उपयोगकेस के आधार पर निर्णय ले सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे