Es gibt nur wenige Vorbehalte bei der Verbindung mit Atlas von Firebase Function. Unten ist der richtige Weg, um eine verbundene Client-Instanz zur weiteren Verwendung in Ihrer FB-Funktion zurückzugeben:
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
}
Erklärung:
-
Berichten zufolge können Sie keine Verbindung zu Atlas herstellen, wenn Sie sich auf einem Spark befinden planen. Stellen Sie sicher, dass Sie auf Blaze upgraden, falls Sie dies noch nicht getan haben.
-
uri
string – Sie sollten das verkürzte URL-Format nicht verwenden, wenn Sie sich von Firebase aus mit Atlas verbinden. Aus irgendeinem Grund funktioniert nur das ältere, lange URL-Format von Firebase zuverlässig. -
client
Variable – Sie sollten denclient
definieren -Variable außerhalb des Exportbereichs und weisen ihr dann die verbundene Clientinstanz innerhalb der Funktion zu, nur wenn sie noch nicht zugewiesen ist. Dadurch wird verhindert, dass der Client bei jedem Funktionsaufruf erneut verbunden wird. Firebase-Funktionen sind zustandslos , aber nicht ganz. Sie werden erst nach einer gewissen Zeit der Inaktivität heruntergefahren. Das bedeutet, dass die Verbindung einige Zeit bestehen bleibt. Aus Dokumenten :Wenn Sie eine Variable im globalen Gültigkeitsbereich deklarieren, kann ihr Wert in nachfolgenden Aufrufen wiederverwendet werden, ohne neu berechnet werden zu müssen.