【问题标题】:Cloud Functions for Firebase organizationCloud Functions for Firebase 组织
【发布时间】:2017-09-07 08:41:29
【问题描述】:

我知道这已经被问到here,但它没有回答我的问题。我的问题是我们如何为 Cloud Functions 分解 index.js,包括 onWrite 调用等。

我知道您可以使用“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
   })

等等……

是否可以不必像这样编写代码(以 Franks OCR 示例为例):

var test = require('./test')

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

提前谢谢....

【问题讨论】:

  • 你为什么不写另一个文件并在你的html中添加另一个脚本呢? 。加载完所有 JS 文件后,可以从任何其他 js 文件访问每个函数
  • 因为这些是在其服务器上运行的 Firebase 云功能。有问题的索引文件被部署到他们的服务器上,数据库使用它来触发事件。

标签: javascript firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

您可以轻松地将函数分布在多个文件中。这是一个例子:

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

【讨论】:

  • 非常感谢您提供了一个很好的例子。我一定是做错了什么,因为我可以发誓我尝试过这种模式没有运气。我觉得自己像个白痴!谢谢!
  • @Michael,通过这个设置,假​​设你在index.js 中初始化firebase-admin,就像const admin = require('firebase-admin'),你将如何将它传递给user-cleanup.js?因为admin只能初始化一次,但是需要在user-cleanup.js中使用
  • index.js 中初始化后,您可以只在其他文件中使用const admin = require('firebase-admin'),它已经被初始化了。
  • 谢谢迈克尔,我发布了我最终做的作为你答案的变体。
【解决方案2】:

作为迈克尔回答的一个变体,我发现这个组织非常整洁,而且是面向对象的。

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

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 2018-01-03
    • 2022-12-01
    • 2018-04-19
    • 2017-08-26
    • 2017-08-08
    • 2017-08-07
    • 1970-01-01
    • 2017-10-09
    相关资源
    最近更新 更多