在Firebase https函数端点中消除双函数名称

时间:2019-07-24 14:04:10

标签: typescript firebase google-cloud-functions

在我熟悉Google云功能的过程中,我还尝试找到“最佳”方式来在文件夹结构以及端点路由结构中组织功能。我也想应用CORS功能并防止重复的代码越多越好。我对自己所取得的成就几乎感到满意,只有最后一个问题困扰着我。我现在拥有的端点现在像这样的模式建立起来:

https://<region>-<projectId>.cloudfunctions.net/<functionname1>/functionname2>

我现在在路由中有2个函数名,但是我还没有找到消除一个函数名的方法。开箱即用,云函数只有1个函数名,而我之所以有2个函数名,与将CORS应用于云函数有关。我正在使用express和CORS中间件来做到这一点。

在一个文件中,我配置了我的cors(应用白名单,处理错误):

const corsConfig = express();
corsConfig.use(cors({origin: originCheck })); //<-- function to apply whitelisting
corsConfig.use(handleCorsError); //<-- change the 500 error to a 403 error

export const app = corsConfig;

此模块用于添加功能及其端点:

test1.ts

import { app } from '../cors';

app.get('/test1', async (_request, response) => {
    response.send("test1");
});

export const test1 = functionsEUWest1.https.onRequest(app);

test2.ts

import { app } from '../cors';

app.get('/test2', async (_request, response) => {
    response.send("test2");
});

export const test2 = functionsEUWest1.https.onRequest(app);

旁注:functionsEUWest1用于配置将功能部署到的区域。

然后将两个测试文件都“导入”(实际上是导出)在index.ts中,CLI使用它来查找和部署功能。

从'./test1'导出*; 从'./test2'导出*;

部署这些功能后,firebase控制台在端点url(/ test1)中仅显示一个函数名称,但是在调用该端点时,它将返回错误:

  

无法获取/   当同时使用两个函数名称(/ test1 / test1)进行调用时,将返回文本“ test1”。第二个/ test1在云函数本身内部处理。

通过使用express,可以向云功能端点添加更多端点,并且有一种方法可以使端点看起来像这样:

  

/ v1 / test1   / v1 / test2

但这(恰当地)意味着所有功能都放在一个Firebase云功能中。而且我认为由于日志记录和性能影响,这不是可行的方法。

有人遇到相同的情况并设法找到一种在端点中消除函数名称的方法吗?还是我现在尝试如何组织代码完全走错了路?

1 个答案:

答案 0 :(得分:0)

这与组织代码的方式无关。 Cloud Functions分配的URL始终将顶级导出函数的名称作为第一个路径组件。这是不可避免的。然后,您的Express路线将添加另一个路径组件。

如果要自定义路径名称,请考虑使用Firebase Hosting作为Cloud Functions前面的缓存代理。然后,您可以使用URL重写来使路径的开头部分随心所欲。

以下是文档:https://firebase.google.com/docs/hosting/functions