节点 + 快速服务器:Firebase 找不到默认应用



我的项目在节点服务器上使用firebase。在我把所有东西都放在一个index.js文件中之前,我决定重构并对代码进行排序。不幸的是,在这样做之后,我一直得到这个错误:

Error: The default Firebase app does not exist. Make sure you call initializeApp() before using any of the Firebase services.

每当我尝试运行firebase servernpm run serve时。

这是我的项目:index.js:

const functions = require("firebase-functions");
const app = require("express")();
const { signup } = require("./handlers/users");
app.post("/signup-user", signup);
exports.api = functions.https.onRequest(app)

文件handlers/users如下:

const firebase = require("firebase");
const { db } = require("../util/admin");
const config = require("../util/config");
firebase.initializeApp(config);
exports.signup = (req, res) => {
let userId;
let token;
const newUser = {
email: req.body.email,
password: req.body.password,
confirmPassword: req.body.confirmPassword
};
// validate inputs
firebase
.auth()
.createUserWithEmailAndPassword(newUser.email, newUser.password)
.then(data => {
userId = data.user.uid;
return data.user.getIdToken();
})
.then(token => {
token = token;
const newUserRole = {
email: newUser.email,
userId,
role: "user"
};
return db.collection("users").add(newUserRole);
})
.then(data => {
return res.status(201).json({ token });
})
.catch(err => {
console.error(err);
if (err.code === "auth/email-already-in-use") {
return res.status(400).json({ email: "Email already in use" });
} else {
return res.status(500).json({ error: err.code });
}
});
};

最后,文件admin如下:

const admin = require("firebase-admin");
const serviceAccount = require("../../account.json");
const db = admin.firestore();
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
});
module.exports = { admin, db }

我该怎么解决这个问题?

最终我发现了问题。在文件admin.js中,在初始化应用程序本身之前,我正在初始化firestore:

const admin = require("firebase-admin");
const serviceAccount = require("../../account.json");
// This line should be moved after initializeApp`:
// const db = admin.firestore();
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
});
const db = admin.firestore();
module.exports = { admin, db }

现在一切如预期!

最新更新