paulyfl
paulyfl

Reputation: 96

Cloud Functions for Firebase organization

I know this was already asked here, BUT it does not answer my question. My question is how can we break apart index.js for Cloud Functions including the onWrite calls and such.

I realize you can use "require" and bring in outside code. It still leaves a bit of code ( in Franks OCR example, for example) , in index.js.

Ideally I'd love to be able to move an entire onWrite event trigger to another file.

EXAMPLE in index.js:

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

How can I move the entire function event watch/call to another js file, and call it from index.js?

My index.js has grown quite large, and reading it for organizational purposes has become a PAIN.

Ideally I'd like my index.js to be very organized such as:

--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
   })

etc....

Is this possible without having to have code written like so (a' la Franks OCR example):

var test = require('./test')

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

Thanks in advance....

Upvotes: 5

Views: 882

Answers (2)

eyeezzi
eyeezzi

Reputation: 635

As a variant of Michael's answer, I found this organization very neat and kind of object-oriented.

// 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
    }
}

Upvotes: 8

Michael Bleigh
Michael Bleigh

Reputation: 26313

You can easily spread your functions across multiple files. Here's an example:

////////////// 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
});

Upvotes: 8

Related Questions