Có một số lưu ý khi kết nối với Atlas từ Chức năng Firebase. Dưới đây là cách chính xác để trả về một phiên bản ứng dụng khách được kết nối để sử dụng thêm trong chức năng FB của bạn:
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
}
Giải thích:
-
theo báo cáo, bạn không thể kết nối với Atlas nếu bạn đang sử dụng Spark kế hoạch. Đảm bảo bạn nâng cấp lên Blaze nếu bạn chưa nâng cấp.
-
uri
string - Bạn không nên sử dụng định dạng url rút gọn khi kết nối với Atlas từ Firebase. Vì một số lý do, chỉ định dạng url dài, cũ hơn mới hoạt động đáng tin cậy từ firebase. -
client
biến - Bạn nên xác địnhclient
biến bên ngoài phạm vi xuất, và sau đó gán cá thể máy khách được kết nối cho nó bên trong hàm, chỉ khi nó chưa được gán. Điều này sẽ ngăn việc kết nối lại máy khách trên mọi lệnh gọi hàm. Các chức năng của Firebase là không trạng thái , nhưng không hoàn toàn. chúng chỉ ngừng hoạt động sau một thời gian không hoạt động. Điều này có nghĩa là kết nối sẽ tồn tại trong một thời gian. Từ tài liệu :Nếu bạn khai báo một biến trong phạm vi toàn cục, giá trị của nó có thể được sử dụng lại trong các lệnh gọi tiếp theo mà không cần phải tính toán lại.