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:
-
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.
-
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. -
client
variabile – Dovresti definire ilclient
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.