node.js - 如何使用 Fixie Socks(Heroku 附加组件)通过 mongoose 连接到 mongodb

标签 node.js mongodb heroku mongoose proxy

我有一个在 heroku 上托管的 node.js express api。它通过 mongoose 连接到 mongodb atlas 如下

mongoose.connect(
`mongodb+srv://${process.env.MONGO_USER}:${process.env.MONGO_PWD}@${process.env.MONGO_HOST}/${process.env.MONGO_DEFAULT_DB}?retryWrites=true`, {
  useNewUrlParser: true,
  autoReconnect: true,
  keepAlive: 300000,
  connectTimeoutMS: 300000,
  socketTimeoutMS: 300000
}
)
.then(result => {
  console.log('Connected and listening to requests!');
  app.listen(process.env.PORT || 3000);
.catch(err => console.log(err));

我想对 Heroku 应用程序使用 Atlas MongoDB Cloud 的白名单,而不是向所有人开放访问。 Heroku 没有固定的 IP 地址,但通过名为 Fixie Socks 的附加组件使它们成为可能。 ,它充当出站流量的代理。

如何使用此附加组件来使连接正常工作? The documentation给出了几个关于如何连接其他服务和数据库的示例,但在mongodb上没有帮助。所有示例都使用 FIXIE_SOCKS_HOST,其中包含 SOCKSV5 代理 URL、用户、密码和端口,但我不知道如何将它与 mongoose.connect 方法结合使用。

此问题已 asked before ,但是当使用不同的附加组件(Fixie vs Fixie Socks)时,它不起作用。

最佳答案

我尝试了 Fixie Socks,但无法让它发挥作用。但是按照此文档,设法使用 Quota Guard 的静态 IP 地址成功连接到 Mongodb Atlas 数据库:
https://support.quotaguard.com/support/solutions/articles/12000066411-how-to-connect-to-mongodb-using-quotaguard
诀窍是在没有 +srv 命令的情况下使用 use mongodb atlas 的连接字符串。要做到这一点,请使用较旧的驱动程序版本,它将为您提供一个包含 3 个副本服务器(每个都有 27017 端口)的连接字符串。然后在 Quota Guard 仪表板上创建 3 个隧道。
确保下载 gqtunnel 包并将其解压缩到您的应用程序的根文件夹中。然后你只需要将 bin/qgtunnel 添加到你的 procfile 中。
例子:
web: bin/qgtunnel your-application 你的论点

关于node.js - 如何使用 Fixie Socks(Heroku 附加组件)通过 mongoose 连接到 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61376584/

相关文章:

javascript - 如何在 java 和 node.js 应用程序之间共享动态属性

node.js - 使用 Dialogflow Conv.Data 或 Conv.User.Storage 的简单计数器

java - Spring Data MongoDB 集合聚合

ruby-on-rails - Heroku 应用程序上的远程 mysql 数据库

node.js - 无法在 Ubuntu Server 16.04 上升级 NPM

angularjs - 如何从 codepen 转为在 PC 上本地运行

MongoDB(和 Mongoose.js): Does the order of query conditions matter?

mongodb - 解析服务器:是否可以为 mongodb 连接提供根证书?

javascript - 移至环境变量时 Firebase API key 未定义

c# - 在 Heroku 中运行 EF Core 迁移