将MongoLab附加到服务器

时间:2017-10-30 04:52:00

标签: node.js mongodb heroku routes mlab

目前,我将此配置部分与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连接,因为它是localhost。 所以我现在的问题是我不知道如何将代码的配置部分传递到我的路由以及连接到不同的集合,然后让它也能用于Heroku。

1 个答案:

答案 0 :(得分:0)

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

一个关键问题是您的应用没有正确使用连接池,因为每次调用端点时都会创建新连接。您应该查看此blog post以更好地了解如何在应用中配置连接逻辑。

关于您的主要问题,您使用process.env的方式似乎有些倒退。通常process.env用于读取存储在环境变量中的信息。对于mLab插件,您可以阅读MONGODB_URI变量以获取connection string for your database

然后,您可以使用变量组合来告诉应用程序在本地运行时使用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 
}