javascript - 使用nodejs在多个文件中初始化firebase应用程序

标签 javascript node.js firebase google-cloud-functions

我想在多个文件中初始化 Firebase 应用程序以正确组织我的方法,但我不确定哪种方法是最佳方法。

下面是文件系统结构:

/functions
 |-keys
 |-methods
 |  |-email.js
 |  |-logger.js
 |-node_modules
 |-index.js
 |-package.json
 |-package-lock.json

在我的 index.js 中,我初始化了 2 个项目,其中 1 个用于生产,另一个用于 OTE。:

const functions = require('firebase-functions');
var firebaseAdmin = require('firebase-admin');

var productionServiceAccount = require('./keys/production-key.json');
var oteServiceAccount = require("./keys/ote-key.json");

var prodServer = firebaseAdmin.initializeApp({
    credential: firebaseAdmin.credential.cert(productionServiceAccount),
    databaseURL: 'https://production-panel.firebaseio.com'
}, "prod");
var oteServer = firebaseAdmin.initializeApp({
    credential: firebaseAdmin.credential.cert(oteServiceAccount),
    databaseURL: "https://ote-panel.firebaseio.com"
}, "ote");

console.log("prodServer: ", prodServer.name, "oteServer: ", oteServer.name)

var mailer = require('./methods/email.js') //import code from method folder
var logger = require('./methods/logger.js') //import code from method folder

以下是我如何处理请求,无论是使用 prod 还是 OTE 项目:

let admin = req.headers.env == 'prod' ? prodServer : oteServer

现在的问题是我的 ./methods/logger.js 也想将日志读/写到数据库中,但我不知道该怎么做。

Below is the `logger.js` code:
var exports = {}

exports.log = function(item, ref, env) {
    let admin = env == 'prod' ? prodServer : oteServer //<--problem here

    return admin.database().ref(ref).push(item)
}

module.exports = exports

我应该再次初始化 firebase 项目还是从 index.js 导入它?

-如果再次初始化firebase项目,它会说项目“名称”已被使用。

-如果从 index.js 导入它,那么我必须从 index.js 导出它,当我将其部署到 Firebase Function 时,它将成为一个onCall 方法..?

-如果我将初始化移动到另一个文件 (./method/initFirebase.js) 并将其导入到 index.js 当我将其部署到 Firebase 函数时,它会自动初始化 Firebase 应用程序吗?

请指教。谢谢。

最佳答案

您可以像您所说的那样创建一个额外的文件 initFirebase.js 并将初始化和导出代码放在那里。

const prodServer = firebaseAdmin.initializeApp({
    credential: firebaseAdmin.credential.cert(productionServiceAccount),
    databaseURL: 'https://production-panel.firebaseio.com',
}, 'prod');
const oteServer = firebaseAdmin.initializeApp({
    credential: firebaseAdmin.credential.cert(oteServiceAccount),
    databaseURL: 'https://ote-panel.firebaseio.com',
}, 'ote');
module.exports = {
    firebaseApp: env === 'prod' ? prodServer : oteServer,
};

并从所有其他文件导入 firebase 应用程序

const firebaseApp = require('../YOUR_initFirebase.js')

所以你不需要担心每个文件中的环境,它在谷歌云功能上对我有用。

关于javascript - 使用nodejs在多个文件中初始化firebase应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52922274/

相关文章:

javascript - 如何从 Cloud Function 获取 Firebase 项目名称或 ID

java - 找不到 com.google.android.gms.internal.zzbck 的类文件

firebase - VueJS + VUEX + Firebase : Where To Hook Up Firebase?

javascript - 在具有相同 id 的许多元素上运行相同的 JQuery 函数

javascript - 使用 cheerio 遍历 DOM - 如何获取所有元素及其对应的文本

javascript - 在 reducer 中向 redux store 添加功能是一种反模式?

node.js - Mongo : create if document doesn't exist, 否则什么也不做

javascript - key 在 firebase 上重复

javascript - HTML5 文件阅读器 API : the event 'onload' does not fire

javascript - Google Apps 脚本将已完成的项目移动到另一个电子表格