Jer*_*rry 5 javascript node.js firebase google-cloud-functions
我想在多个文件中初始化Firebase应用程序以正确组织我的方法,但我不确定哪种方法是最好的。
下面是文件系统结构:
/functions
|-keys
|-methods
| |-email.js
| |-logger.js
|-node_modules
|-index.js
|-package.json
|-package-lock.json
Run Code Online (Sandbox Code Playgroud)
在我的 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
Run Code Online (Sandbox Code Playgroud)
以下是我如何处理使用 prod 或 OTE 项目的请求:
let admin = req.headers.env == 'prod' ? prodServer : oteServer
Run Code Online (Sandbox Code Playgroud)
现在的问题是我也./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
Run Code Online (Sandbox Code Playgroud)
我应该再次初始化 firebase 项目还是从中导入它index.js?
- 如果再次初始化 firebase 项目,它会说已经使用了项目“名称”。
- 如果从 导入它index.js,那么我必须从 导出它index.js,当我将它部署到 Firebase 函数时,它将成为一个 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,
};
Run Code Online (Sandbox Code Playgroud)
并从所有其他文件导入 firebase 应用程序
const firebaseApp = require('../YOUR_initFirebase.js')
Run Code Online (Sandbox Code Playgroud)
因此,您无需担心每个文件中的环境,它在谷歌云功能上对我有用。
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |