Node.js Express JS:在需要模块时将数据库作为变量/参数发送
假设我有以下代码Node.js Express JS:在需要模块时将数据库作为变量/参数发送,node.js,firebase,express,google-cloud-firestore,google-cloud-functions,Node.js,Firebase,Express,Google Cloud Firestore,Google Cloud Functions,假设我有以下代码 const functions = require("firebase-functions"); const admin = require("firebase-admin"); const serviceAccount = require("./permissions.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const serviceAccount = require("./permissions.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://blah-blah-blah.firebaseio.com"
});
const db = admin.firestore();
app.use("/auth", require("./auth"));
现在的问题是,我必须在auth.js文件中使用cloud firestore数据库功能,该功能目前存储在变量db中,而无需再次使用admin.initializeApp。有什么方法可以实现这一点,比如导入/导出db变量等
这就是我在auth.js中使用它的地方:
const express = require("express");
const auth = express.Router();
db.collection("data")
.doc("sample")
.get()
.then(
document => {
if (document.exists) {
return done(null, {
id: user.id,
name: user.name,
email: user.email
});
} else {
//create document
}
},
err => {
//handle error
}
);
当然,现在db将是未定义的,这是我需要解决的问题,因为Firebase SDK 1.0.0版的云函数必须使用admin.initializeApp()初始化代码>,请参阅文档 然后,要与Firestore交互,只需使用,例如:
admin.firestore().collection('....').get();
因此,如果我正确理解了您的问题,以下更改应该会起到作用:
index.js
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
//const db = admin.firestore(); not sure you need that here, it depends if you interact (or not) with Firestore in index.js
app.use("/auth", require("./auth"));
const admin = require("firebase-admin");
const db = admin.firestore();
//....
db.collection("data")
.doc("sample")
.get()
.then(
document => {
if (document.exists) {
return done(null, {
id: user.id,
name: user.name,
email: user.email
});
} else {
//create document
}
},
err => {
//handle error
}
);
//....
auth.js
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
//const db = admin.firestore(); not sure you need that here, it depends if you interact (or not) with Firestore in index.js
app.use("/auth", require("./auth"));
const admin = require("firebase-admin");
const db = admin.firestore();
//....
db.collection("data")
.doc("sample")
.get()
.then(
document => {
if (document.exists) {
return done(null, {
id: user.id,
name: user.name,
email: user.email
});
} else {
//create document
}
},
err => {
//handle error
}
);
//....
需要更多解释什么是必需的。你认为还有什么不清楚的?你到底在用
app做什么。使用(“/auth”,require(“/auth”)代码>?从Firebase SDK的1.0.0版开始,您必须使用admin.initializeApp()进行初始化代码>。然后,要与Firestore交互,您只需要使用AdminSDK,例如:Admin.Firestore().collection('..').get()
@Renaud Tarnec检查集合中是否存在某些特定文档