【发布时间】:2019-06-27 18:43:32
【问题描述】:
我正在开展一个项目,其中我们有与 Firebase 一起使用的预先存在的云功能。我们正在使用 Firebase 云托管添加一个小型 React SPA,该 SPA 将与一些现有的公共云功能进行交互。
到目前为止,我们的工作方式是在 Firebase 中有一个开发项目和一个生产项目。对于云功能,这很好用,我们使用firebase functions:config:set 设置了特定于环境的配置,用于区分生产服务器和开发服务器。
问题在于托管的 SPA 与云功能联系。我已经看到很多关于如何在托管代码中访问环境配置的问题,例如这个:How to reference Firebase Functions config variables from a Firebase-hosted application? 答案似乎是有返回环境变量值的 firebase 函数,但对我来说这个只是将问题进一步向后移动。我完全理解,由于 SPA 在浏览器中运行,因此让该代码可以访问环境变量将是一个巨大的安全问题。
对于托管 SPA,我真正需要的唯一环境特定配置是云功能的基址。
例如,如果在我的云功能中我有
const functions = require('firebase-functions');
const express = require('express');
const test = express();
test.on('/hello/:target', (req, res) => {
res.send(`Hello ${req.params.target}`);
})
exports.test = functions.https.onRequest(test);
部署后,此云功能可在 https://us-central1-DEV-PROJECT-NAME.cloudfunctions.net/test/hello/world 和 https://us-central1-PROD-PROJECT-NAME.cloudfunctions.net/test/hello/world 使用。我如何才能最好地为 SPA 部署到的项目获取适当的根 URL(https://us-central1-DEV-PROJECT-NAME.cloudfunctions.net 或 https://us-central1-PROD-PROJECT-NAME.cloudfunctions.net)?
例如。是否有一些全局我可以在前端 js 代码中访问,我可以在其中执行以下操作:
const url = `${__FIREBASE_GLOBALS__.cloudFunctions.baseUrl}/test/hello/${input}`;
是否根据托管应用部署到的项目正确定义了 url?
【问题讨论】:
标签: firebase google-cloud-functions firebase-hosting