MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Connessione a MongoDB Atlas dalle funzioni Firebase

Ci sono alcuni avvertimenti quando ci si connette ad Atlas da Firebase Function. Di seguito è riportato il modo corretto per restituire un'istanza client connessa per un ulteriore utilizzo nella funzione 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
}

Spiegazione:

  1. secondo quanto riferito, non puoi connetterti ad Atlas se sei su una Spark Piano. Assicurati di eseguire l'upgrade a Blaze se non l'hai ancora fatto.

  2. uri string – Non dovresti usare il formato URL abbreviato quando ti connetti ad Atlas da Firebase. Per qualche motivo, solo il vecchio formato URL lungo funziona in modo affidabile da Firebase.

  3. client variabile – Dovresti definire il client variabile al di fuori dell'ambito di esportazione, quindi assegnarle l'istanza client connessa all'interno della funzione, solo se non è già stata assegnata. Ciò impedirà la riconnessione del client a ogni chiamata di funzione. Le funzioni di Firebase sono stateless , ma non del tutto. si spengono solo dopo un certo periodo di inattività. Ciò significa che la connessione persisterà per qualche tempo. Da documenti :Se dichiari una variabile in ambito globale, il suo valore può essere riutilizzato nelle invocazioni successive senza dover essere ricalcolato.