Der er få forbehold, når du opretter forbindelse til Atlas fra Firebase Function. Nedenfor er den korrekte måde at returnere en tilsluttet klientforekomst til videre brug i din FB-funktion:
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
}
Forklaring:
-
efter sigende kan du ikke oprette forbindelse til Atlas, hvis du er på en Spark plan. Sørg for at opgradere til Blaze, hvis du ikke har gjort det endnu.
-
uri
streng – Du bør ikke bruge det forkortede url-format, når du opretter forbindelse til Atlas fra Firebase. Af en eller anden grund virker kun det ældre, lange url-format pålideligt fra firebase. -
client
variabel – Du bør definereclient
variabel uden for eksportområdet, og tildel derefter den tilsluttede klientinstans til den inde i funktionen, hvis den ikke allerede er tildelt. Dette vil forhindre gentilslutning af klienten ved hver funktionsindkaldelse. Firebase-funktioner er statsløse , men ikke helt. de bliver først lukket ned efter en periode med inaktivitet. Det betyder, at forbindelsen vil vare i nogen tid. Fra dokumenter :Hvis du erklærer en variabel i globalt omfang, kan dens værdi genbruges i efterfølgende kald uden at skulle genberegnes.