【问题标题】:Firebase multiple environments with Flamelink使用 Flamelink 的 Firebase 多环境
【发布时间】:2020-12-04 07:08:20
【问题描述】:

我正在使用带有 Node.js 的 firebase 函数,并且我正在尝试为此创建多个环境。据我所知,我只需要在 Firebase 中为此创建单独的项目即可。

我也在使用 Flamelink,我想达到同样的效果。我实际上有一个允许多种环境的 Flamelink 篝火计划。 我担心的是,Flamelink 中的不同环境写入 Firebase 中的同一个数据库,仅使用 environment 标志分隔它,所以每当我想从数据库中查询某些内容时,我还必须指定我的环境。

有没有办法通过我的设置为不同的 Flamelink 环境提供不同的数据库,所以我只在我的配置中指定 environment 而不是在我的查询中?

【问题讨论】:

    标签: firebase google-cloud-firestore flamelink-cms


    【解决方案1】:

    目前不可能使用 Flamelink 为每个环境创建一个数据库。 实现这一点的唯一方法是将两个项目都添加到 Flamelink。

    不过,Flamelink JS SDK 可以在云功能中使用,并且可以减轻在多个环境中工作的一些复杂性。

    Flamelink JS SDK 在初始化时会接收一个环境参数(以及其他一些参数,如语言环境和数据库类型),将 SDK 方法的使用与环境关联起来。

    import * as functions from 'firebase-functions';
    import * as admin from 'firebase-admin';
    import * as flamelink from 'flamelink/app';
    import 'flamelink/content';
    
    admin.initializeApp();
    const firebaseApp = admin.app();
    
    const flApp = flamelink({
      firebaseApp,
      dbType: 'cf',
      env: 'staging',
      locale: 'en-US',
    });
    
    export const testFunction = functions.https.onRequest(async(request, response) => {
      if (request.query.env) {
        flApp.settings.setEnvironment(request.query.env) // example 'production'
      }
    
      try {
        const posts = await flApp.content.get({ schemaKey: 'blogPosts' })
        res.status(200).json({ posts })
      } catch (e) {
        // handle error
      }
    });
    

    根据您连接的前端框架/语言,您可以使用环境变量在环境中传递

    JS 客户端示例

    const env = (process.env.FLAMELINK_DATA_ENV || 'staging').toLowerCase()
    await fetch(`https://yourhost.cloudfunctions.net/testFunction?env=${env}`)
    

    【讨论】:

    • 感谢您的帮助。这确实有效,但我需要针对不同环境使用不同的数据库,但我想我唯一的选择是在 flamelink 中有一个单独的项目,连接到另一个 firebase 项目。
    猜你喜欢
    • 1970-01-01
    • 2017-09-25
    • 2020-07-26
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2013-02-26
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多