2017-07-10 1 views
0

Ich versuche, eine Open-Source-Bibliothek mit einigen Funktionen in Firebase zu erstellen, die Benutzer klonen und in ihrer eigenen Firebase-Installation bereitstellen können. Unsere Funktionalität ermöglicht es Benutzern, eine Sammlung von Modulen mit einer JSON-Konfigurationsdatei auszuwählen und dann für jedes ausgewählte Modul unsere functions/index.js diese Funktionalität als HTTP-Funktionen zu laden. Die Datei wird so aussehen.Firebase: Wie Module dynamisch unter einer HTTP-Funktion enthalten sind

{modules: [{ 
    name: 'ModuleOne', 
    options: { 
     something: true 
    } 
}, { 
    name: 'ModuleThree', 
    options: { 
     something: false 
    } 
}, { 
    name: 'ModuleFour', 
    options: { 
     something: true 
    } 
}]} 

Die Feuerbasis Cloud-Funktion HTTP-URLs für diese wäre wie:

https://us-central1-projectname-dev.cloudfunctions.net/OurProjectName/ModuleOne https://us-central1-projectname-dev.cloudfunctions.net/OurProjectName/ModuleThree https://us-central1-projectname-dev.cloudfunctions.net/OurProjectName/ModuleFour

Wie können wir eine Feuerbasis Cloud-Funktion erstellen, die uns dynamisch wählen HTTP ermöglicht Module wie dies und aktivieren Sie sie basierend auf dieser Konfiguration? Wir sind in Ordnung mit der Verschachtelung der dynamischen Modulpfade unter OurProjectName, also haben wir vielleicht eine einzige Funktion, die einen Router verwendet, unter dem wir dynamisch Wege hinzufügen können, um unsere Module zu laden?

+0

ich nicht klar bin, was Sie zu tun versuchen. Was genau ist ein "Modul" in diesem Fall? Ein Knotenmodul von npm? –

Antwort

1

I think was Sie hier suchen, erstellt im Wesentlichen eine HTTP-Funktion Fabrik. Das ist eigentlich nicht sehr schwierig. Sie können, wie etwas tun:

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

module.exports = function(options) { 
    const app = express(); 
    options.modules.forEach(moduleConfig => { 
    // add express routes for each module 
    }); 
    return functions.https.onRequest(app); 
}; 

Dann Entwickler würden Ihre Bibliothek wie folgt verwenden:

const yourlib = require('yourlib'); 

exports.someFnName = yourlib({ 
    modules: [ 
    {name: 'ModuleOne', options: {}} 
    ] 
}); 
Verwandte Themen