Node.js 默认的Firebase应用程序不存在。确保在使用任何Firebase服务之前调用initializeApp()。在FirebaseAppError
我正在学习使用Firebase云功能,我正在关注Firebase的官方教程视频 当我运行本地服务器并转到HTTP链接时 错误:默认Firebase应用程序不存在。确保在使用任何Firebase服务之前调用initializeApp() 我试图找到解决办法,但哪儿也找不到。我有一些模糊相关的问题,但对于javascript,我的代码是typescript。我确实在.js和.ts文件中添加了建议的语法Node.js 默认的Firebase应用程序不存在。确保在使用任何Firebase服务之前调用initializeApp()。在FirebaseAppError,node.js,typescript,firebase,google-cloud-functions,Node.js,Typescript,Firebase,Google Cloud Functions,我正在学习使用Firebase云功能,我正在关注Firebase的官方教程视频 当我运行本地服务器并转到HTTP链接时 错误:默认Firebase应用程序不存在。确保在使用任何Firebase服务之前调用initializeApp() 我试图找到解决办法,但哪儿也找不到。我有一些模糊相关的问题,但对于javascript,我的代码是typescript。我确实在.js和.ts文件中添加了建议的语法 admin.initializeApp(functions.config().firebase);
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 tho时,该功能按预期工作 只需在代码的全局范围内调用
admin.initializeApp()
。不要传递任何参数来接受默认服务帐户,该帐户应该有读写您的Cloud Firestore数据库的权限。这听起来很疯狂,但我也遇到了同样的问题。然后我改变了我的“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);
试试看:
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();
建议您,有时即使您正确初始化了应用程序,也会出现这种情况,此时只需检查您的db实例是否位于函数内部而不是全局 #nodejs
在使用firestore或任何其他功能之前,必须初始化app admin.initializeApp()。我使用的是typescript,一个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() {
}
}
造刀
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;
}
}
导入后的全局范围是多少?很抱歉,我对这一点非常陌生,任何不在函数或其他带花括号的块中的地方,通常不缩进。请您解释一下什么是“不传递任何参数以接受默认服务帐户,该帐户应该具有读写您的云Firestore数据库的权限”。意思是什么?我现在收到此错误“错误:错误:无法加载默认凭据。请浏览以获取详细信息。”并且似乎与服务帐户相关的问题有关。此外,如果我将其部署到firebase,则该函数可以正常工作,因此错误仅在本地服务器中出现。请确保您拥有最新版本的仿真器。这意味着更新全局firebase工具模块。
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;
}
}