名为"[DEFAULT]"的Firebase应用程序已存在且google firebase引用在服务器上不起作用

Yer*_*spo 8 reference node.js firebase firebase-realtime-database

我在https://firebase.google.com/docs/database/server/retrieve-data#section-start中按照服务器配置的所有步骤操作 ,但是当我尝试在浏览器中创建引用时告诉我该应用程序被叫[默认]已经存在.那时如果preiono F5然后告诉我有"databaseUrl",我必须确保在启动应用程序firebase时提供该数据.

var express = require('express');
var router = express.Router();

var firebase = require('firebase');

/* GET home page. */
router.get('/', function(req, res, next) {

  firebase.initializeApp({
    serviceAccount: "aaaabbbbcccc.json",
    databaseUrl: "https://xxxxxyyyyyzzzzz.firebaseio.com/" // <<<<--- it can not find
  });

  var db = firebase.database();   // <<<<---- Here is a problem
  var ref = db.ref('vistas/principal');
  ref.once('value', function(data){

    res.render('index', { title: 'Express' });

  });


});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

我创建了其他授权,其他密钥等.但没有任何作用.谢谢.

节点-v = v4.2.6 Firebase v3.x

FIREBASE FATAL ERROR: Can't determine Firebase Database URL. Be sure to include databaseURL option when calling firebase.intializeApp().

Error: FIREBASE FATAL ERROR: Can't determine Firebase Database URL.  Be sure to include databaseURL option when calling firebase.intializeApp(). 
    at Error (native)
    at ad (c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\node_modules\firebase\database-node.js:37:278)
    at Object.firebase.INTERNAL.registerService.Reference [as database] (c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\node_modules\firebase\database-node.js:238:113)
    at O.u (c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\node_modules\firebase\app-node.js:16:94)
    at Object.d [as database] (c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\node_modules\firebase\app-node.js:18:182)
    at c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\routes\index.js:14:21
    at Layer.handle [as handle_request] (c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\node_modules\express\lib\router\layer.js:95:5)
    at next (c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\node_modules\express\lib\router\route.js:131:13)
    at Route.dispatch (c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (c:\TsPrj\_pruebas\vistas-realtime-desde-firebase\node_modules\express\lib\router\layer.js:95:5)
Run Code Online (Sandbox Code Playgroud)

Rez*_*ngi 7

您可以检查应用程序是否已加载,因为它应该加载一次.一种方法是:

if (!firebase.apps.length) {
    firebase.initializeApp({});
}
Run Code Online (Sandbox Code Playgroud)


lom*_*maj 6

这是我为这个问题写的答案

这是我在升级到新版 Firebase 时也遇到的问题。您可能想要初始化两个单独的 firebase 应用程序,但我只想在我的应用程序的两个不同位置使用 refs,但我遇到了相同的错误。

针对这种情况,您需要做的是为您的应用程序创建一个仅初始化 firebase 一次的 firebase 模块,然后在应用程序的其他地方导入或要求它。

您应该从 firebase 控制台复制整个配置对象,并将其与 API 密钥和所有内容粘贴到此处。

这是我制作模块的方式示例:modules/firebase.js

import firebase from 'firebase';
var firebaseConfig = {
  apiKey: "some-api-key",
  authDomain: "some-app.firebaseapp.com",
  databaseURL: "https://some-app.firebaseio.com",
  storageBucket: "some-app.appspot.com",
};

var FbApp = firebase.initializeApp(firebaseConfig);
module.exports = FbApp.database(); //this doesnt have to be database only
Run Code Online (Sandbox Code Playgroud)

然后在您的应用程序的其他地方,您只需:

import Firebase from '/your/module/location'
var messagesRef = Firebase.ref("messages/");
Run Code Online (Sandbox Code Playgroud)

或者

var Firebase = require('/your/module/location');
var messagesRef = Firebase.ref("messages/");
Run Code Online (Sandbox Code Playgroud)


pak*_*man 0

你应该在每个应用程序的 router.get 之外只执行一次 firebase.initializeApp 顺便说一句,你的导出看起来很奇怪/错误......如果它是一个模块,为什么你直接调用 router.get ?一旦您需要您的模块,它就会被执行。为什么要出口路由器?