Firebase:如何在 HTTP 函数下动态包含模块
Firebase: How to dynamically include modules under an HTTP function
我正在尝试在 Firebase 上构建一个包含某些功能的开源库,人们可以将其克隆并部署到他们自己的 Firebase 安装中。我们的功能允许用户 select 带有 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 云函数,允许我们动态地 select 像这样的 HTTP 模块并基于此配置启用它们?我们可以将动态模块路径嵌套在 OurProjectName
下,所以也许我们有一个使用路由器的函数,我们可以在路由器下动态添加路径以加载我们的模块?
我 认为 您在这里寻找的实质上是创建一个 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: {}}
]
});
我正在尝试在 Firebase 上构建一个包含某些功能的开源库,人们可以将其克隆并部署到他们自己的 Firebase 安装中。我们的功能允许用户 select 带有 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 云函数,允许我们动态地 select 像这样的 HTTP 模块并基于此配置启用它们?我们可以将动态模块路径嵌套在 OurProjectName
下,所以也许我们有一个使用路由器的函数,我们可以在路由器下动态添加路径以加载我们的模块?
我 认为 您在这里寻找的实质上是创建一个 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: {}}
]
});