【问题标题】:ReferenceError when reorganizing cloud functions重新组织云函数时的 ReferenceError
【发布时间】:2020-11-25 08:33:23
【问题描述】:

我正在按照https://firebase.google.com/docs/functions/organize-functions 上的说明重新组织我的云功能。

但我正在努力重用 index.js 文件中定义的一些全局常量。

// index.js
const functions = require('firebase-functions')
const admin = require('firebase-admin')
admin.initializeApp()

const db = admin.firestore()
db.settings({ ignoreUndefinedProperties: true })

exports.choice = require('./choice')
...
// choice.js
const functions = require('firebase-functions')

exports.redirection = functions
    .region('europe-west1')
    .https.onRequest(async (req, res) => {
        try {
            const doc = await db.doc(`stbk${req.params[0]}`).get()
...

得到以下错误:> ReferenceError: db is not defined

任何帮助将不胜感激!

更新

我做了以下事情:

// global.js
const admin = require('firebase-admin')
admin.initializeApp()

const db = admin.firestore()
db.settings({ ignoreUndefinedProperties: true })

module.exports = { admin, db }
// choice.js
const functions = require('firebase-functions')
const global = require('./global')

exports.redirection = functions
    .region('europe-west1')
    .https.onRequest(async (req, res) => {
        try {
            const doc = await global.db.doc(`stbk${req.params[0]}`).get()

这是一个有效的解决方案吗?

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    这是因为 db 没有在choice.js 中声明。您可以在 index.js 中将 db 声明为全局变量,也可以在choice.js 中声明它。

    【讨论】:

      【解决方案2】:

      您收到错误是因为您没有正确初始化 Firestore 数据库。 您可以使用以下代码:

      索引.js

      const functions = require('firebase-functions');
      const admin = require('firebase-admin');
      admin.initializeApp(functions.config().firestore);
      
      const firestoreDB = admin.firestore()
      
      exports.choice = require('./choice')
      module.exports = { db }
      

      Choice.js

      
      const functions = require('firebase-functions')
      const global = require('./index')
      
      exports.redirection = functions
          .region('europe-west1')
          .https.onRequest(async (req, res) => {
              try {
                  const doc = await global.doc(`stbk${req.params[0]}`).get()
      
      

      我认为只有 index.js 和choice.js 就足够了。为什么要创建另一个名为 global 的 .js?如果您想在 global.js 中如上所述进行分离,那么您的代码对我来说似乎是有效的。

      如果您有任何其他问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 2017-08-14
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 1970-01-01
        • 2022-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多