9
votes

L'application Firebase par défaut n'existe pas. Assurez-vous d'appeler initializeApp () avant d'utiliser l'un des services Firebase. chez FirebaseAppError

J'apprends à utiliser Firebase Cloud Function et je suis le tutoriel officiel de Firebase pour apprendre les promesses JavaScript (Pt.1)

Lorsque j'exécute un serveur local et que j'accède au lien HTTP, j'obtiens

Erreur: l'application Firebase par défaut n'existe pas. Assurez-vous d'appeler initializeApp () avant d'utiliser l'un des services Firebase.

J'ai essayé de trouver la solution mais je n'ai trouvé nulle part. J'ai une question vaguement liée mais pour javascript et mon code est en script. J'ai ajouté la syntaxe suggérée dans les fichiers .js et .ts

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

// Start writing Firebase Functions
// https://firebase.google.com/docs/functions/typescript

export const getVoucher = functions.https.onRequest((request, response) => {
    const promise = admin.firestore().doc('/voucher/Eg2AtnGmKmX8Y0vBZiBG').get()
    const p2 = promise.then(snapshot=>{
        const data = snapshot.data()
        response.send(data)
    })
    p2.catch(error => {
        //Handlle the error
        console.log('error: '+error)
        response.status(500).send(error)
    })
});

Mais quand même, j'obtiens la même erreur

Voici mon index.tcs.

admin.initializeApp(functions.config().firebase);

La fonction fonctionne comme prévu lorsqu'elle est déployée sur Firebase tho.


0 commentaires

5 Réponses :


13
votes

Vous devez simplement appeler admin.initializeApp() à la portée globale de votre code. Ne transmettez aucun paramètre pour accepter le compte de service par défaut, qui doit être autorisé à lire et à écrire votre base de données Cloud Firestore.


7 commentaires

Global Scope serait après après l'importation? Désolé, je suis très nouveau dans ce domaine


Tout endroit qui n'est pas à l'intérieur d'une fonction ou d'un autre bloc avec des accolades, où vous ne mettez généralement pas en retrait.


Pouvez-vous expliquer ce que "Ne transmettez aucun paramètre pour accepter le compte de service par défaut, qui doit être autorisé à lire et à écrire votre base de données Cloud Firestore." veux dire? J'obtiens cette erreur maintenant "Erreur: Erreur: impossible de charger les informations d'identification par défaut. Accédez à cloud.google.com/docs/authentication/getting-started pour plus d'informations." et semble être lié au problème lié au compte de service.


En outre, la fonction fonctionne correctement si je la déploie sur Firebase, l'erreur ne concerne donc que le serveur local.


Assurez-vous que vous disposez de la dernière version de l'émulateur. Cela signifie mettre à jour le module global firebase-tools.


J'ai fait "npm install -g firebase-tools" et il a mis à jour le paquet mais j'obtiens toujours la même erreur. Je suis désolé, je suis tellement nouveau dans tout cela et je ne peux pas simplement comprendre ce qui me manque.


Aujourd'hui, cela fonctionne pour une exécution en production, mais sur I0m local en utilisant avec succès ceci: admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: 'localhost:8080', });



5
votes

Cela peut sembler fou, mais j'ai eu le même problème. Ensuite, j'ai changé mon "admin.initializeApp ();" place comme ci-dessous. Alors ça marche.

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const express = require('express');
const app = express();
//put here.
admin.initializeApp();

const db = admin.firestore();

const firebaseConfig = {
// config data
};

const firebase = require('firebase');

firebase.initializeApp(firebaseConfig);


0 commentaires

0
votes

Essayez-le:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const app = require('express')();
const firebase = require('firebase');    

// service account file custom for serve    
var serviceAccount = require("serviceAccount.json"); // for deploying you need to delete it

// admin credential for localhost or emulator
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "database_url"
});

// Firebase SDK configuration        
const config ={
    //firebase config
};

firebase.initializeApp(config);
    
const db = admin.firestore();


0 commentaires

1
votes

conseil, cela arrive parfois même si vous avez correctement initialisé l'application, à ce stade, vérifiez simplement si votre instance de base de données est placée dans la fonction non globale.

#nodejs

var db = admin.database();//inside function


0 commentaires

1
votes

vous devez initialiser l'application admin.initializeApp () avant d'utiliser Firestore ou toute autre fonctionnalité.


0 commentaires