5

我知道這已被要求here,但它不能回答我的問題。我的問題是我們如何分解包含onWrite調用等雲功能的index.js。Firebase組織的雲端函數

我知道你可以使用「require」並引入外部代碼。它仍然會在index.js中留下一些代碼(例如,在Franks OCR示例中)。

理想情況下,我很想能夠將整個onWrite事件觸發器移動到另一個文件。

例如,在index.js:

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

我怎樣才能將整個功能事件表/調用另一個js文件,並從index.js打電話了嗎?

我的index.js增長得相當大,爲了組織目的而閱讀它已成爲一種痛苦。

理想情況下,我想我的index.js到非常有組織,如:

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

等....

這是可能的,而不必寫了,像這樣的代碼(A」 LA弗蘭克斯OCR爲例):

var test = require('./test') 

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

在此先感謝....

+0

爲什麼不直接寫另一個文件並在html中添加另一個腳本? 。一旦加載了所有JS文件,就可以從任何其他js文件訪問每個功能 –

+0

因爲這些是在其服務器上運行的Firebase雲功能。有問題的索引文件被部署到他們的服務器,並且數據庫將其用於觸發事件。 – paulyfl

回答

7

您可以輕鬆地傳播你的功能跨多個文件。下面是一個例子:

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

非常感謝你的一個很好的例子。我一定是做錯了,因爲我可以發誓我沒有運氣就嘗試過這種模式。我覺得自己像個白癡!謝謝! – paulyfl

+0

@Michael,使用這個設置,假​​設你像''const admin = require('firebase-admin')'這樣在'index.js'中初始化'firebase-admin',你會如何將它傳遞給'user-cleanup.js '?因爲管理員只能初始化一次,但你需要在'user-cleanup.js'中使用它 – eyeezzi

+0

一旦在'index.js'中初始化,你可以在其他文件中使用'const admin = require('firebase-admin')'它已經被初始化了。 –

6

作爲邁克爾答案的一個變種,我發現這個組織非常整潔,有種面向對象。

// 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 
    } 
} 
相關問題