MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Connexion à MongoDB Atlas à partir des fonctions firebase

Il y a quelques mises en garde lors de la connexion à Atlas à partir de Firebase Function. Vous trouverez ci-dessous la manière correcte de renvoyer une instance client connectée pour une utilisation ultérieure dans votre fonction 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
}

Explication :

  1. apparemment, vous ne pouvez pas vous connecter à Atlas si vous êtes sur un Spark planifier. Assurez-vous de passer à Blaze si vous ne l'avez pas encore fait.

  2. uri chaîne - Vous ne devez pas utiliser le format d'URL raccourci lors de la connexion à Atlas à partir de Firebase. Pour une raison quelconque, seul l'ancien format d'URL longue fonctionne de manière fiable à partir de Firebase.

  3. client variable – Vous devez définir le client variable en dehors de la portée de l'exportation, puis affectez-lui l'instance de client connectée dans la fonction, uniquement si elle n'est pas déjà affectée. Cela empêchera de reconnecter le client à chaque invocation de fonction. Les fonctions Firebase sont sans état , mais pas entièrement. ils ne s'arrêtent qu'après une certaine période d'inactivité. Cela signifie que la connexion persistera pendant un certain temps. À partir de la documentation :Si vous déclarez une variable en portée globale, sa valeur pourra être réutilisée lors d'invocations ultérieures sans avoir à être recalculée.