将Firebase DB连接到Next.js应用程序错误

时间:2020-09-04 20:21:00

标签: database firebase next.js

我正在尝试连接NextJS应用程序以从Firebase数据库获取数据。我基于以下示例建立实现:https://github.com/firebase/quickstart-nodejs/tree/master/database

这是我到目前为止所拥有的:

在lib / firebase.js中

import firebase from "firebase-admin";
const serviceAccount = require("../serviceAccount.json");

firebase.initializeApp(
  {
    credential: firebase.credential.cert(serviceAccount),
    databaseURL: "https://myDB.firebaseio.com",
  },
  "DB"
);

export default firebase;

,然后在pages / index.js

import firebase from "../lib/firebase";

export async function getStaticProps(context) {
  var test = firebase.database().ref("artsci");
  test.on("value", function (snapshot) {
    return {
      props: { test }, // will be passed to the page component as props
    };
  });
}

但是,每当我运行yarn dev时,都会出现此错误:

错误:名为“ DB”的Firebase应用已存在。这意味着您使用与第二个参数相同的应用程序名称多次调用了initializeApp()。确保每次调用initializeApp()时都提供一个唯一的名称。

此外,如果我将此行添加到firebase.js中

if (!firebase.apps.length) {
  firebase.initializeApp(
    {
      credential: firebase.credential.cert(serviceAccount),
      databaseURL: "https://myDB.firebaseio.com",
    },
    "DB"
  );
}

然后我得到这个错误:

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

任何提示或资源将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:1)

  • 遇到相同的问题时,我想到了以下代码。签出:-
import firebase from 'firebase/app';
import 'firebase/storage';
import 'firebase/firestore';

export const connectFB = () => {
    const firebaseConfig = {
        apiKey: process.env.apiKey,
        authDomain: process.env.authDomain,
        databaseURL: process.env.databaseURL,
        projectId: process.env.projectId,
        storageBucket: process.env.storageBucket,
        messagingSenderId: process.env.messagingSenderId,
        appId: process.env.appId
    };

    if (!firebase.apps.length) {
        firebase.initializeApp(firebaseConfig);
    }

    return firebase;
}

答案 1 :(得分:0)

使用 .env 文件存储所有凭据并在运行时直接使用它来获取实际上非常省事。

试试这个https://github.com/vercel/next.js/discussions/14420#discussioncomment-29816