CEN*_*EDE 5 mongodb node.js firebase google-cloud-functions mongodb-atlas
我正在尝试从 firebase 函数连接到 mongodb atlas。
export default async () => {
try {
const url = 'mongodb+srv://foo:bar@foo-cluster.mongodb.net/my-db?retryWrites=true';
const client = await MongoClient.connect(url);
client.dbName('my-db');
return client;
} catch (e) {
throw e;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
{ "code": "ESERVFAIL", "errno": "ESERVFAIL", "syscall": "querySrv", "hostname": "_mongodb._tcp.foo-cluster.mongodb.net" }
^3.1.0-beta4有什么想法吗?谢谢。
从 Firebase Function 连接到 Atlas 时有一些注意事项。以下是返回连接的客户端实例以在 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
}
Run Code Online (Sandbox Code Playgroud)
解释:
据报道,如果您使用的是Spark计划,则无法连接到 Atlas 。如果您还没有升级到 Blaze,请确保升级到 Blaze。
uristring – 从 Firebase 连接到 Atlas 时,不应使用缩短的 url 格式。出于某种原因,只有较旧的长 url 格式才能从 firebase 可靠地工作。
client变量 - 您应该client在导出范围之外定义变量,然后在函数内部将连接的客户端实例分配给它,仅当它尚未分配时。这将防止在每次函数调用时重新连接客户端。Firebase 函数是无状态的,但并非完全无状态。他们只会在一段时间不活动后关闭。这意味着连接将持续一段时间。来自 docs:如果您在全局范围内声明一个变量,则其值可以在后续调用中重用,而无需重新计算。
| 归档时间: |
|
| 查看次数: |
3661 次 |
| 最近记录: |