默认 Firebase 应用不存在。确保在使用任何 Firebase 服务之前调用 initializeApp()。在 FirebaseAppError
Posted
技术标签:
【中文标题】默认 Firebase 应用不存在。确保在使用任何 Firebase 服务之前调用 initializeApp()。在 FirebaseAppError【英文标题】:The default Firebase app does not exist. Make sure you call initializeApp() before using any of the Firebase services. at FirebaseAppError 【发布时间】:2019-12-15 06:43:29 【问题描述】:我正在学习使用 Firebase Cloud Function,我正在关注 Firebase 的 Learn javascript Promises (Pt.1) 官方教程视频
当我运行本地服务器并转到 HTTP 链接时,我得到了
错误:默认 Firebase 应用不存在。确保在使用任何 Firebase 服务之前调用 initializeApp()。
我试图找到解决方案,但在任何地方都找不到。我有一些模糊相关的问题,但对于 javascript,我的代码在打字稿中。我确实在 .js 和 .ts 文件中添加了建议的语法
admin.initializeApp(functions.config().firebase);
但我还是遇到了同样的错误
这是我的 index.tcs。
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)
)
);
该功能在部署到 firebase 时按预期工作。
【问题讨论】:
【参考方案1】:您应该只在代码的全局范围内调用admin.initializeApp()
。请勿传递任何参数来接受默认服务帐号,该帐号应有权读取和写入您的 Cloud Firestore 数据库。
【讨论】:
全球范围会在导入后?抱歉,我对此很陌生 任何不在函数或其他带花括号的块内的地方,通常不会缩进。 您能否解释一下“不要传递任何参数以接受默认服务帐户,该帐户应有权读取和写入您的 Cloud Firestore 数据库。”方法?我现在收到此错误“错误:错误:无法加载默认凭据。浏览至cloud.google.com/docs/authentication/getting-started 以获取更多信息。”似乎与服务帐户相关问题有关。 另外,如果我将它部署到firebase,该功能可以正常工作,因此错误仅在本地服务器中。 确保您拥有最新版本的模拟器。这意味着更新全局 firebase-tools 模块。【参考方案2】:忠告,有时即使您正确初始化应用程序也会出现这种情况,此时只需检查您的数据库实例是否放置在非全局函数内。
#nodejs
var db = admin.database();//inside function
【讨论】:
【参考方案3】:这听起来可能很疯狂,但我遇到了同样的问题。然后我改变了我的“admin.initializeApp();”像下面这样的地方。然后就可以了。
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);
【讨论】:
【参考方案4】:您必须在使用 firestore 或任何其他功能之前初始化应用 admin.initializeApp()。
【讨论】:
【参考方案5】:我使用打字稿,一个pattner单例,因为 admin.initializeApp();需要一个唯一的实例
import admin from 'firebase-admin';
export default class firebaseDAO
private static _intance: firebaseDAO;
db: any;
private constructor()
admin.initializeApp();
this.db = admin.firestore();
public static get instance()
return this._intance || (this._intance = new this());
// iniciar un metodo
start()
创建一个 DAO
import firebaseDAO from '../database/firebase.dao';
constructor()
this.db = firebaseDAO.instance.db;
async getPacientes()
try
const userQuerySnapshot = await this.db.collection('pacientes').get();
const users: any[] = [];
userQuerySnapshot.forEach(
(doc: any) =>
users.push(
id: doc.id,
data: doc.data()
);
);
this.response.resultado=users;
return this.response;
catch (error)
this.response.resultado=null;
return this.response;
【讨论】:
【参考方案6】:试试看:
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();
【讨论】:
以上是关于默认 Firebase 应用不存在。确保在使用任何 Firebase 服务之前调用 initializeApp()。在 FirebaseAppError的主要内容,如果未能解决你的问题,请参考以下文章
未创建任何 firebase 应用程序“默认” - 调用 firebase.initializeapp()
Swift:Firebase:如何确保除了我的应用程序之外没有人可以访问我的数据库
“initialize_app '默认的 Firebase 应用已经存在。”云函数 pub sub