ReferenceError при реорганизации облачных функций - PullRequest
0 голосов
/ 05 августа 2020

Я следую инструкциям на https://firebase.google.com/docs/functions/organize-functions, чтобы реорганизовать свои облачные функции.

Но мне сложно повторно использовать некоторые глобальные константы, определенные в индексе. 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()

Это подходящее решение?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вы получаете сообщение об ошибке, потому что вы неправильно инициализируете базу данных 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 }

Выбор. 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()

Я думаю только индекс. js и выбор. js достаточно. Почему вы хотите создать еще один. js под названием global? Если вы хотите разделить, как указано выше, в global. js, то ваш код мне кажется действительным.

Дайте мне знать, если у вас есть другие вопросы.

0 голосов
/ 05 августа 2020

Это потому, что db не объявлен внутри choice. js. Вы можете либо объявить db как глобальную переменную внутри index. js, либо объявить ее по выбору. js тоже.

...