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 
    } 
} 
相关问题