【问题标题】:Firebase cloud functions master handling functionFirebase 云函数主处理函数
【发布时间】:2020-09-26 03:59:57
【问题描述】:

another stackoverflow post 中建议了一个主处理函数,将处理分配给不同的函数。

    functions.storage.object().onFinalize((object) => {
      if (object.name.startsWith('User_Pictures/')) {    
        return handleUserPictures(object);
      } else if (object.name.startsWith('MainCategoryPics/')) {
        return handleMainCategoryPictures(object);
      }
    })

我已经尝试通过使用index.js 来实现这一点,如下所示:

const handler = require('./handler');
exports.handler = handler.handler;

exports.userpictures = require('./userpictures');
exports.mainpictures = require('./mainpictures');

mainpictures.js 中具有以下内容:

exports.handleMainCategoryPictures= async (object) => { ... code here ... }

当我运行firebase deploy 时,没有检测到任何功能。我期待 3. 这种类型的结构是否可能,我在正确导出方面是否犯了一些明显的错误?当我尝试在没有处理程序的情况下直接导出时,检测到函数。

【问题讨论】:

    标签: node.js firebase google-cloud-functions


    【解决方案1】:

    您仍然需要使用函数构建器 API 定义导出的函数。在您的第一个代码位中就是这样:

    export fun = functions.storage.object().onFinalize(...)
    

    如果您不使用此 API 从 index.js 构建和导出函数,那么 Firebase CLI 将找不到任何函数,也不会部署任何内容。如果需要,您可以从所需文件中使用此 API,但 index.js 仍必须最终导出这样构建的函数。

    如果您实际上正在使用它而不在这里显示它,那么我建议您编辑问题以显示所有正在播放的文件的complete, minimal example

    【讨论】:

    • 对,我试图将onFinalize() 分解为处理程序函数,以减少检查mimetype、路径等的每个导出函数中的重复量。从你的回答中我可以第一个代码位,如export finalizeHandler = functions.storage.object().onFinalize(...)。我的目标是在 firebase 中有多个函数在必要时被调用,并减少在任何写入存储时触发所有函数的开销。
    • 我明白你想要做什么。那么具体的问题是什么?正如我所说,你不能避免使用函数生成器。您仍然可以根据具体情况委托从其他文件导出的其他功能。只需在主 onFinalize 回调中根据需要要求并调用它们。
    猜你喜欢
    • 2022-08-14
    • 1970-01-01
    • 2020-07-27
    • 2019-01-18
    • 2018-05-17
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多