gpt4 book ai didi

node.js - 从 firebase 函数连接到 MongoDB Atlas

转载 作者:行者123 更新时间:2023-12-02 02:22:06 25 4
gpt4 key购买 nike

我正在尝试从 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;
}
}

但是,我收到此错误:

{ "code": "ESERVFAIL", "errno": "ESERVFAIL", "syscall": "querySrv", "hostname": "_mongodb._tcp.foo-cluster.mongodb.net" }

  1. 我确保我的 Firebase 计划设置为 Blaze,以便我可以连接到 Google 网络之外的任何客户端。
  2. 我在 mongodb atlas 仪表板中将函数的 IP 列入白名单,为了确保安全,我还添加了“从任何地方连接”。
  3. 我使用的是nodejs mongo驱动版本^3.1.0-beta4

有什么想法吗?谢谢。

最佳答案

从 Firebase 功能连接到 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
}

说明:

  1. 据报道,如果您使用的是 Spark 套餐,则无法连接到 Atlas。如果尚未升级到 Blaze,请务必升级。

  2. uri 字符串 – 从 Firebase 连接到 Atlas 时不应使用缩短的网址格式。由于某种原因,只有旧的长 url 格式才能在 firebase 中可靠地工作。

  3. client 变量 – 您应该在导出范围之外定义 client 变量,然后在函数内将连接的客户端实例分配给它,前提是它尚未分配。这将防止在每次函数调用时重新连接客户端。 Firebase 函数是无状态,但并非完全如此。它们只会在一段时间不活动后才会关闭。这意味着连接将持续一段时间。 From docs :如果在全局范围内声明变量,则其值可以在后续调用中重用,而无需重新计算。

关于node.js - 从 firebase 函数连接到 MongoDB Atlas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50362647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com