我试图在多个文件中拆分我的所有功能,但我遇到了firebase-admin初始化的问题。 我的第一个文件是这样的:
const functions = require('firebase-functions');
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase)
const userHandler = require('./user')
和第二个文件user.js
const functions = require('firebase-functions')
const admin = require('firebase-admin')
...
exports.update = (req, res) => {
admin.auth().verifyIdToken(req.body).catch(error => {console.log(error)}
}
所有在一个文件中它完美地工作,在2个单独的文件中给我这个错误:
ReferenceError: ISTANCE_NAME is not defined
我无法在user.js中执行第二次initializeApp,因为firebase会抛出错误:
错误:默认的Firebase应用已存在。这意味着你打过电话 initializeApp()不止一次提供应用程序名称 第二个论点。在大多数情况下,您只需要调用initializeApp() 一旦。但是,如果您确实要初始化多个应用程序,请传递一秒钟 initializeApp()的参数,为每个应用程序提供唯一的名称。
如何在2个文件中使用相同的admin共享权限? 我还尝试将initializeApp函数放在另一个文件中并导入但不起作用,同样的错误(ISTANCE_NAME未定义)
答案 0 :(得分:0)
这是一个很好的问题。
因此,您只能打一次admin.initializeApp()
。
const functions = require('firebase-functions');
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase)
const userHandler = require('./user')
const admin = require('firebase-admin')
您无需再次初始化。首次初始化后,配置将正确存储。
或者,您可以做一些更复杂的事情,例如getAdmin()
函数。
我过去做的方式是定义函数并使用 handler 函数制作单独的文件,看起来像
updateHandler(req, res, admin); // or the other
updateHander(whateverParamsToOtherFile);
必须从index.js
文件中导出所有功能,才能正确部署在Firebase上。我建议使用index.js
存储所有功能,并从其他文件中调用处理程序。
通过参数传递,您可以获得想要的结果。但是在admin.initializeApp()
的特定情况下,如果在index.js
中进行了初始化,它将在其他文件中正常工作。