将MongoLab连接到服务器



目前,我有这个配置部分与 Heroku 的 mlab 一起运行,或者如果它正在开发中,则在本地运行

 var env = process.env.NODE_ENV || 'development';
 if (env === 'development') {
     process.env.PORT = 3000;
     process.env.MONGODB_URI = 'mongodb://localhost:27017/manage';
 } else if (env === 'test') {
     process.env.PORT = 3000;
     process.env.MONGODB_URI = 'mongodb://localhost:27017/manage-test';
 }

它适用于我的代码的身份验证部分。但是,我必须访问该数据库中的另一个集合,目前,我正在本地连接它

app.get('/auth-home', isLoggedIn, (req, res) => {
    MongoClient.connect("mongodb://localhost:27017/manage", (err, db) => {
        db.collection("home", (err, collection) => {
            collection.find().toArray((err, result) => {
                if (err) {
                    return err;
                }
            });
        });
    });
});

但是,这不会与 mlab 连接,因为它是本地主机。所以我现在的问题是,我不确定如何将代码的配置部分传递到我的路由中以及连接到不同的集合,然后让它也与 Heroku 一起工作。

应用的配置方式存在一些问题。

一个关键问题是应用未正确利用连接池,因为它在每次调用终结点时都会创建新连接。应查看此博客文章,以更好地了解如何在应用中配置连接逻辑。

关于你的主要问题,你利用process.env的方式似乎有点倒退。通常,process.env用于读取存储在环境变量中的信息。对于 mLab 加载项,可以读取 MONGODB_URI 变量以获取数据库的连接字符串。

然后,可以使用变量组合来告知应用在本地运行时使用 localhost 连接字符串,而不是在 Heroku 中运行时使用 mLab URI。像这样:

// assuming 'development' is local, 'test' is heroku
var app_env = process.env.NODE_ENV || 'development';
if (app_env === 'development') {
     var app_port = 3000;
     var uri = 'mongodb://localhost:27017/manage';
} else if (app_env === 'test') {
     var app_port = 3000;
     var uri = process.env.MONGODB_URI 
}

最新更新