Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 默认的Firebase应用程序不存在。确保在使用任何Firebase服务之前调用initializeApp()。在FirebaseAppError_Node.js_Typescript_Firebase_Google Cloud Functions - Fatal编程技术网

Node.js 默认的Firebase应用程序不存在。确保在使用任何Firebase服务之前调用initializeApp()。在FirebaseAppError

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);

我正在学习使用Firebase云功能,我正在关注Firebase的官方教程视频

当我运行本地服务器并转到HTTP链接时

错误:默认Firebase应用程序不存在。确保在使用任何Firebase服务之前调用initializeApp()

我试图找到解决办法,但哪儿也找不到。我有一些模糊相关的问题,但对于javascript,我的代码是typescript。我确实在.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 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;
    }
}