Łączenie się z Atlasem z Firebase Function wiąże się z kilkoma zastrzeżeniami. Poniżej znajduje się prawidłowy sposób zwracania podłączonej instancji klienta do dalszego wykorzystania w funkcji 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
}
Wyjaśnienie:
-
podobno nie możesz połączyć się z Atlasem, jeśli jesteś na Sparkie plan. Upewnij się, że dokonałeś aktualizacji do Blaze, jeśli jeszcze tego nie zrobiłeś.
-
uri
string – nie należy używać skróconego formatu adresu URL podczas łączenia się z Atlasem z Firebase. Z jakiegoś powodu tylko starszy, długi format adresu URL działa niezawodnie z Firebase. -
client
zmienna – należy zdefiniowaćclient
zmienna poza zakresem eksportu, a następnie przypisz do niej połączone wystąpienie klienta wewnątrz funkcji, tylko jeśli nie jest jeszcze przypisane. Zapobiegnie to ponownemu połączeniu klienta przy każdym wywołaniu funkcji. Funkcje Firebase są bezstanowe , ale nie do końca. wyłączają się dopiero po pewnym okresie bezczynności. Oznacza to, że połączenie będzie trwało przez jakiś czas. Z dokumentów :Jeśli zadeklarujesz zmienną w zasięgu globalnym, jej wartość może być ponownie wykorzystana w kolejnych wywołaniach bez konieczności ponownego obliczania.