【问题标题】:Express app with Realtime DataBase crashed, error: The default Firebase app does not exist带有实时数据库的 Express 应用程序崩溃,错误:默认的 Firebase 应用程序不存在
【发布时间】:2023-02-13 23:09:27
【问题描述】:

使用 Firebase 的实时数据库,使用 TypeScript 表达 REST Api。对所讨论堆栈的实施所采取的初始步骤的简要总结:

  1. 首先在 .env 文件中定义必要的环境变量,包括私钥和数据库 URL。

    FIREBASE_PROJECT_ID=""
    FIREBASE_PRIVATE_KEY=""
    FIREBASE_CLIENT_EMAIL="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
    FIREBASE_DATABASE_URL="...firebaseio.com"
    
    1. 为实时数据库中的用户数据结构定义必要的模型和接口,包括哈希密码和地址信息。

    2. 创建一个 server.ts 文件来设置 Express 应用程序,导入必要的包,并定义必要的中间件,例如 cors 和 body-parser。

      import bodyParser from 'body-parser';
      import cors from 'cors';
      
      import app from './app';
      
      export function start() {
        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({ extended: false }));
        app.use(cors());
      
        const port = process.env.PORT || 3000;
        app.listen(port, () => {
          console.log(`Server started at http://localhost:${address.port}`);
        });
      }
      
    3. 创建一个单独的 app.ts 文件来定义 REST API 的端点和路由。导入并使用 dotenv 库将环境变量加载到项目中。

      从“dotenv”导入 dotenv; 从“firebase-admin”导入 firebase; 从“快递”进口快递;

      import router from './routes/user.route';
      import { start } from './server';
      
      dotenv.config();
      
      firebase.initializeApp({
        credential: firebaseAdmin.credential.cert({
          projectId: process.env.FIREBASE_PROJECT_ID,
          privateKey: process.env.FIREBASE_PRIVATE_KEY,
          clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
        }),
        databaseURL: process.env.FIREBASE_DATABASE_URL
      });
      
      start();
      
      const app = express();
      
      app.use('/signup', router);
      app.use('/login', router);
      app.use('/user/:userId', router);
      
      export default app;
      

    运行 start nodemon,我得到错误:'默认的 Firebase 应用程序不存在。确保在使用任何 Firebase 服务之前调用 initializeApp()。

    安装的依赖项:

    "dependencies": {
      "@types/express": "^4.17.17",
      "bcrypt": "^5.1.0",
      "body-parser": "^1.20.1",
      "cors": "^2.8.5",
      "dotenv": "^16.0.3",
      "express": "^4.18.2",
      "firebase": "^9.17.1",
      "firebase-admin": "^11.5.0",
      "nodemon": "^2.0.20",
      "ts-node": "^10.9.1",
      "typescript": "^4.9.5"
    },
    "devDependencies": {
      "@types/bcrypt": "^5.0.0",
      "@types/cors": "^2.8.13"
    }
    

【问题讨论】:

    标签: node.js firebase express firebase-realtime-database


    【解决方案1】:

    您的配置缺少许多属性:

    firebase.initializeApp({
      credential: firebaseAdmin.credential.cert({
        projectId: process.env.FIREBASE_PROJECT_ID,
        privateKey: process.env.FIREBASE_PRIVATE_KEY,
        clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
      }),
      databaseURL: process.env.FIREBASE_DATABASE_URL
    });
    

    apiKey: '...',
    authDomain: '...',
    projectId: '...',
    storageBucket: '...',
    messagingSenderId: '...',
    appId: '...',
    measurementId: '...',

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2016-09-18
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多