MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Herstellen einer Verbindung mit MongoDB Atlas über Firebase-Funktionen

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:

  1. 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.

  2. 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.

  3. client Variable – Sie sollten den client 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.