Има няколко предупреждения при свързване към Atlas от Firebase Function. По-долу е правилният начин да върнете екземпляр на свързан клиент за по-нататъшно използване във вашата FB функция:
import { MongoClient } from 'mongodb'
const uri = 'mongodb://<USER>:<PASSWORD>@foo-shard-00-00-xxx.gcp.mongodb.net:27017,foo-shard-00-01-xxx.gcp.mongodb.net:27017,foo-shard-00-02-xxx.gcp.mongodb.net:27017/test?ssl=true&replicaSet=FOO-shard-0&authSource=admin&retryWrites=true'
let client
export default async () => {
if (client && client.isConnected()) {
console.log('DB CLIENT ALREADY CONNECTED')
} else try {
client = await MongoClient.connect(uri, { useNewUrlParser: true })
console.log('DB CLIENT RECONNECTED')
}
catch (e) {
throw e
}
return client
}
Обяснение:
-
съобщава се, че не можете да се свържете с Atlas, ако сте на Spark план. Уверете се, че сте надстроили до Blaze, ако още не сте го направили.
-
uri
низ – Не трябва да използвате съкратения URL формат, когато се свързвате към Atlas от Firebase. По някаква причина само по-старият, дълъг URL формат работи надеждно от firebase. -
client
променлива – Трябва да дефиниратеclient
променлива извън обхвата на експортиране и след това му присвоете свързания клиентски екземпляр във функцията, само ако вече не е присвоен. Това ще предотврати повторното свързване на клиента при всяко извикване на функция. Функциите на Firebase са без състояние , но не изцяло. те се изключват само след известен период на неактивност. Това означава, че връзката ще продължи известно време. От документи :Ако декларирате променлива в глобален обхват, нейната стойност може да се използва повторно при последващи извиквания, без да се налага да се изчислява отново.