使用 mongoose 和 Fixie(Heroku 插件)连接到 mongodb
Posted
技术标签:
【中文标题】使用 mongoose 和 Fixie(Heroku 插件)连接到 mongodb【英文标题】:Connecting to mongodb using mongoose and Fixie (Heroku add-on) 【发布时间】:2017-07-02 22:24:57 【问题描述】:我有一个托管在 Atlas MongoDB Cloud 集群上的 mongodb 数据库。我目前正在使用 mongoose 访问我的 node.js 应用程序中的数据库:
mongoose.connect("mongodb://user:pw@cluster0-shard-00-00-***.mongodb.net:***,cluster0-shard-00-01-***.mongodb.net:***,cluster0-shard-00-02-***.mongodb.net:***/admin?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin");
因为 Atlas MongoDB Cloud 有一个白名单,而 Heroku 不提供为我的应用程序获取固定 IP 地址的可能性,所以我使用Fixie add-on。基本上,Fixie 充当出站流量的代理。
这样,我可以通过 HTTP 请求资源,这些资源通过 Fixie 提供的固定 IP 地址进行隧道传输。但我需要的是使用 Fixie 的代理连接到 Atlas Cloud 集群,以便从数据库中检索和修改数据。
可以用猫鼬完成吗?
mongoose.connect
函数接受 option parameter,但我找不到任何关于通过代理建立连接的选项。
【问题讨论】:
【参考方案1】:刚刚收到 Fixie 团队的回复:
Fixie 是一个 http/https 代理,因此它不适用于 mongodb 连接所需的低级别 TCP 连接
当我问到这种情况下使用 SOCKS 的可能性时,他们回答:
看起来 mongoose 本身不支持 socks 代理,并且它不接受自定义套接字(这是 mysql 和 Postgres 的 Node 数据库驱动程序支持它的方式)。
显然,就我而言,没有办法通过 Fixie(Heroku 插件)提供的代理解决方案使用 mongoose 建立与 MongoDB Atlas 集群的连接。
【讨论】:
我处于同样的情况(Heroku + Node/Express + Mongoose + MongoDB Atlas)。我知道的两个当前选项是 1)允许 MongoDB Atlas 接受来自0.0.0.0/0
的流量(所有 IP 地址),或 2)获得一个 Heroku Private Space,它有一个静态 IP 选项(需要他们的企业版,它谣言的起价 > 1000 美元/月)。看起来 Mongoose 的 node-mongodb-native/connection
驱动程序需要接受自定义套接字连接。
@ykorach 我必须将我的 mongo 网络 IP 列入白名单才能接受流量 0.0.0.0/0
。由于这是一个沙盒应用程序,我真的不在乎。我将来可能会转移到 ec2 上的 aws 以获得静态 IP。
@drew578 如果您将 0.0.0.0/0 列入白名单,则您将其对整个互联网开放,因此使用 Fixie 获取静态 IP 毫无意义。我最终部署到 AWS 的 ec2 实例。
@ykorach Fixie 现在有另一个名为 Fixie Socks 的插件,它可以接受 TCP 流量。我只是想弄清楚如何实际使用它来连接我的 Mongo 实例。
@matrix4use 不——我们花了很多时间试图弄清楚这一点,但我们没有运气。我唯一能开始工作的就是本文中的最后一个示例:blog.apify.com/…。但是,您需要使用常规的 Fixie,而不是 Fixie Socks 才能使用。以上是关于使用 mongoose 和 Fixie(Heroku 插件)连接到 mongodb的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Fixie Socks(Heroku 插件)通过 mongoose 连接到 mongodb
NestJS 和 Mongoose 使用 Mongoose-Sequence
使用 Mongoose / mongoose-dbref 使用和填充(真实的)DBRef 数组