5

Wiem, że to już zostało zadane here, ALE to nie odpowiada na moje pytanie. Moje pytanie brzmi: jak możemy złamać index.js w Cloud Functions, włączając w to połączenia onWrite i inne.Funkcje chmurowe dla organizacji Firebase

Rozumiem, że możesz użyć "wymagać" i wprowadzić kod zewnętrzny. Nadal pozostawia trochę kodu (na przykład w przykładzie OCR firmy Franks), w pliku index.js.

Idealnie chciałbym móc przenieść cały wyzwalacz zdarzeń OnRite do innego pliku.

przykład w index.js:

exports.sysQueueUserNew = functions.database.ref("/sys/queue/user_new/{queueId}").onWrite((event) => { 
     // do something 
}) 

Jak mogę przesunąć cały zegarek zdarzeń funkcja/zadzwonić do innego pliku js i wywołać ją z index.js?

Mój index.js stał się dość duży, a jego odczytanie w celach organizacyjnych stało się BÓLEM.

Idealnie chciałbym moje index.js być bardzo zorganizowany, takich jak:

--in index.js -- 
    /// User cleanup 
    userHelpers()  

    /// SYS Logs 
    sysLogs() 

--and in userHelpers.js have the onWrite trigger for example--- 
    functions.database.ref("/sys/queue/user_new/{queueId}").onWrite((event) => { 
     // create user 
    }) 

itp ....

Czy jest to możliwe bez konieczności posiadania kodu napisanego jak tak (a” przykładem la Franks OCR):

var test = require('./test') 

exports.sysQueueUserNew = functions.database.ref("/sys/queue/user_new/{queueId}").onWrite((event) => { 
     // do something 
     test.doCleanup() 
}) 

góry dzięki ....

+0

Dlaczego po prostu nie napiszesz innego pliku i nie dodasz innego skryptu do swojego html? . Po załadowaniu wszystkich plików JS, każda funkcja jest dostępna z dowolnego innego pliku js. –

+0

Ponieważ są to funkcje chmury Firebase uruchamiane na ich serwerze. Plik indeksu, o którym mowa, zostaje wdrożony na swoim serwerze, a DB używa go do zdarzeń wyzwalaczy. – paulyfl

Odpowiedz

7

można łatwo rozkłada działa w wielu plikach. Oto przykład:

////////////// index.js 

exports.sysQueueUserNew = require('./sys-queue-user-new'); 
exports.userCleanup = require('./user-cleanup'); 

///////////// sys-queue-user-new.js 

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

module.exports = functions.database 
    .ref("/sys/queue/user_new/{queueId}") 
    .onWrite(e => { 
    // do something 
    }); 

///////////// user-cleanup.js 

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

module.exports = functions.auth.user().onDelete(e => { 
    // do something 
}); 
+0

Dziękuję bardzo za miły przykład. Musiałem zrobić coś złego, ponieważ mogłem przysiąc, że próbowałem tego wzoru bez szczęścia. Czuję się jak idiota! Dziękuję Ci! – paulyfl

+0

@Michael, Z tą konfiguracją, załóżmy, że zainicjowałeś 'firebase-admin' w' index.js' tak jak "const admin = require ('firebase-admin')', jak byś przekazał to do 'user-cleanup.js '? Ponieważ admin może zostać zainicjowany tylko raz, ale musisz go użyć w 'user-cleanup.js' – eyeezzi

+0

Po zainicjowaniu w' index.js' możesz po prostu 'const admin = require ('firebase-admin')' w innych plikach i zostanie on już zainicjowany. –

6

Jako wariant odpowiedzi Michaela, uznałem tę organizację za bardzo zgrabną i swoistą obiektową.

// index.js 
const admin = require('firebase-admin') 
admin.initializeApp(functions.config().firebase) 

const user = require('./user')(admin) 
exports.sendWelcomeEmail = user.sendWelcomeEmail 

// user.js 
const functions = require('firebase-functions') 

module.exports = function(admin) { 

    let sendWelcomeEmail = functions.auth.user().onCreate(event => { 
     // return admin.database().ref().update({}) 
    }) 

    return { 
     sendWelcomeEmail: sendWelcomeEmail 
    } 
} 
Powiązane problemy