Firebase:如何在HTTP功能下动态包含模块

时间:2017-07-10 17:13:46

标签: javascript firebase google-cloud-functions

我正在尝试在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下,所以我们可能只有一个使用路由器的功能,在该路由器下我们可以动态添加路径来加载我们的模块吗?

1 个答案:

答案 0 :(得分: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: {}}
  ]
});