Er zijn enkele kanttekeningen bij het verbinden met Atlas vanuit Firebase Function. Hieronder vindt u de juiste manier om een verbonden client-instantie terug te sturen voor verder gebruik in uw FB-functie:
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
}
Uitleg:
-
naar verluidt kunt u geen verbinding maken met Atlas als u zich op een Spark bevindt plan. Zorg ervoor dat je upgradet naar Blaze als je dat nog niet hebt gedaan.
-
uri
string - Gebruik de verkorte url-indeling niet wanneer u verbinding maakt met Atlas vanuit Firebase. Om de een of andere reden werkt alleen het oudere, lange url-formaat betrouwbaar vanuit firebase. -
client
variabele – U moet declient
. definiëren variabele buiten het exportbereik en wijs vervolgens de verbonden clientinstantie eraan toe binnen de functie, alleen als deze nog niet is toegewezen. Dit voorkomt dat de client opnieuw wordt verbonden bij elke functieaanroep. Firebase-functies zijn staatloos , maar niet helemaal. ze worden pas uitgeschakeld na een bepaalde periode van inactiviteit. Dit betekent dat de verbinding enige tijd zal blijven bestaan. Van documenten :Als u een variabele in globale scope declareert, kan de waarde ervan opnieuw worden gebruikt in volgende aanroepen zonder dat deze opnieuw hoeft te worden berekend.