Ada beberapa peringatan saat menghubungkan ke Atlas dari Firebase Function. Di bawah ini adalah cara yang benar untuk mengembalikan instance klien yang terhubung untuk digunakan lebih lanjut dalam fungsi FB Anda:
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
}
Penjelasan:
-
kabarnya, Anda tidak dapat terhubung ke Atlas jika Anda menggunakan Spark rencana. Pastikan Anda meningkatkan ke Blaze jika belum.
-
uri
string – Anda tidak boleh menggunakan format url yang dipersingkat saat menghubungkan ke Atlas dari Firebase. Untuk beberapa alasan, hanya format url lama dan panjang yang bekerja dengan andal dari firebase. -
client
variabel – Anda harus mendefinisikanclient
variabel di luar cakupan ekspor, lalu tetapkan instance klien yang terhubung ke dalamnya di dalam fungsi, hanya jika belum ditetapkan. Ini akan mencegah menghubungkan kembali klien pada setiap pemanggilan fungsi. Fungsi Firebase tanpa kewarganegaraan , tapi tidak seluruhnya. mereka hanya bisa dimatikan setelah beberapa periode tidak aktif. Ini berarti bahwa koneksi akan bertahan selama beberapa waktu. Dari dokumen :Jika Anda mendeklarasikan variabel dalam lingkup global, nilainya dapat digunakan kembali dalam pemanggilan berikutnya tanpa harus dihitung ulang.