【问题标题】:Firebase: How to dynamically include modules under an HTTP functionFirebase:如何在 HTTP 函数下动态包含模块
【发布时间】:2017-07-10 17:13:46
【问题描述】:

我正在尝试在 Firebase 上构建一些功能的开源库,人们可以克隆并部署到他们自己的 Firebase 安装中。我们的功能允许用户选择带有 JSON 配置文件的模块集合,然后对于选择的每个模块,我们的 functions/index.js 应该将该功能加载为 HTTP 函数。该文件将如下所示。

{modules: [{
    name: 'ModuleOne',
    options: {
        something: true
    }
}, {
    name: 'ModuleThree',
    options: {
        something: false
    }
}, {
    name: 'ModuleFour',
    options: {
        something: true
    }
}]}

Firebase 云函数的 HTTP URL 如下:

https://us-central1-projectname-dev.cloudfunctions.net/OurProjectName/ModuleOne https://us-central1-projectname-dev.cloudfunctions.net/OurProjectName/ModuleThree https://us-central1-projectname-dev.cloudfunctions.net/OurProjectName/ModuleFour

我们如何创建一个 firebase 云功能,允许我们像这样动态选择 HTTP 模块并基于此配置启用它们?我们可以将动态模块路径嵌套在OurProjectName 下,所以也许我们有一个使用路由器的函数,我们可以在该函数下动态添加路径来加载我们的模块?

【问题讨论】:

  • 我不清楚您要做什么。在这种情况下,“模块”到底是什么?来自 npm 的节点模块?

标签: javascript firebase google-cloud-functions


【解决方案1】:

认为您在这里寻找的本质上是创建一个 HTTP 函数工厂。这其实不是很困难。您可以执行以下操作:

const functions = require('firebase-functions');
const express = require('express');

module.exports = function(options) {
  const app = express();
  options.modules.forEach(moduleConfig => {
    // add express routes for each module
  });
  return functions.https.onRequest(app);
};

然后开发人员会像这样使用您的库:

const yourlib = require('yourlib');

exports.someFnName = yourlib({
  modules: [
    {name: 'ModuleOne', options: {}}
  ]
});

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多