名为“[ DEFAULT ]”的 Firebase 应用程序已经存在(应用程序/重复应用程序)

嗨,我正在尝试单元测试,同时开发一个简单的 Web 与 AngularJS + Firebase,但我有一个问题,定义规范和尝试运行测试

myProject/test/spec/main.js :

describe('Controller: MainCtrl', function() {


var MainCtrl, scope


beforeEach(module('MainApp'));


beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
})
}));


it('should....',function(){
expect(true).toBe(true)
})
it('should2....',function(){
expect(false).toBe(false)
})
});

结果:

PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should.... FAILED
Error: [$injector:modulerr] Failed to instantiate module MainApp due
to: Firebase: Firebase App named '[DEFAULT]' already exists
(app/duplicateapp).

然而,定义一次规范并不是问题。例如:

it('should....',function(){
expect(true).toBe(true)
})

我不知道为什么这是我给我一个提示的原因

这是我正在开发的项目。

Https://github.com/parkwookyun/firebase-angular-board

142374 次浏览

我只是扫了一眼你的 github 回购,看到有更多的.js 文件比你的问题建议。 我有两个独立的。JS 文件。两者都包含在同一个 html 页面,都是配置和初始化的默认应用程序时,只需要做一次,该页面我相信。对我来说,有效的方法是注释掉第二个“ initializeApp ()”,这样我就不会再出现这个错误了。试着在你的。并注释掉或删除其中一个初始化。

Var config = { “ my api key” authDomain: “ something.firebaseapp.com”, DataseURL: “ https://somesite.firebaseio.com”, ProjectId: “ myProjectId”, “ somesite.appspot.com”, MessagingSenderId: “ some Integers” }; //firebase.initializeApp (config) ;

我在使用 firebase 时遇到了同样的问题,我意识到我正在初始化 firebase 两次,例如:

function initializeFirebase(){
var config = {
apiKey: "myApiKey",
authDomain: "myAuthDomain",
databaseURL: "myDatabaseUrl",
storageBucket: "myStorageBocket",
messagingSenderId: "idhere"
};
//initialize firebase
firebase.initializeApp(config);
}

在我的例子中,我使用了 response,并且从两个不同的组件调用 initializeFirebase () ,但是我决定从父组件调用它。现在我可以查询我的数据库,插入记录,删除等。

希望这对谁有帮助

I recently solved this issue in my own code. My issue was caused by accidentally linking my javascript file, which calls initializeApp(), in the head and in the body of my html file. My fix was to delete the duplicate javascript tag in the head of my html file so only one existed in the body.

扫描代码以确保只调用 initializeApp ()一次。这包括任何可能调用该方法或在 html 文件中复制 js 文件的 js 文件。

if (!firebase.apps.length) {
firebase.initializeApp({});
}else {
firebase.app(); // if already initialized, use that one
}

答案差不多

我也有同样的问题

如果您使用的是 ES6模块,并且通过 npm 安装了 firebase,则不能将 init 脚本放入 index.html

这是火力基地依赖关系的重复

在我的例子中,我并没有多次明确地调用 initializeApp(),所以在阅读主要答案之后我仍然感到困惑。结果是,如果使用 Firebase 托管,那么初始化将通过 SDK 自动配置自动调用,也就是说,当 index.html: <script src="/__/firebase/init.js"></script>中有这一行时,不需要调用 initializeApp(config)

“当您部署到 Firebase 或在本地测试应用程序时,此脚本会自动为活动 Firebase 项目配置 Firebase JavaScript SDK 并初始化 SDK。”SDK 自动配置

发生此错误仅仅是因为您正在尝试多次将 firebase 初始化到您的项目中。

检查 project 是否在 admin.apps 中。如果是,则使用(如果没有初始化)。这将防止错误的发生。

const projectFbData = admin.apps.find((item) => item.name_ === projectId) || admin.initializeApp(config, projectId)