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.
5 Réponses :
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.
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', });
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);
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();
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
vous devez initialiser l'application admin.initializeApp () avant d'utiliser Firestore ou toute autre fonctionnalité.