我正在尝试连接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()。
任何提示或资源将不胜感激!谢谢!
答案 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