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检查集合中是否存在某些特定文档