连接到mongodb Atlas集群和本地主机

时间:2019-07-25 04:59:24

标签: node.js mongoose mongodb-atlas

我将我的nodejs项目部署到了​​Heroku,并使用了mongodb集群的URL,但我也想在本地计算机上工作并使用本地主机。

我尝试编写此代码,因为当它不连接到群集时它应该连​​接到本地主机,但是问题是当未连接时地图集url不会返回``未定义''。 Atlas群集和本地主机。

var mongoose = require('mongoose');

mongoose.Promise = global.Promise;

require('dotenv').config();

const mlabDB = `mongodb+srv://${process.env.MLAB_USERNAME}:${process.env.MLAB_PASSWORD}@todo-app-qhj7g.mongodb.net/test?retryWrites=true&w=majority`;

mongoose.connect(mlabDB || 'mongodb://localhost:27017/TodoApp', {useNewUrlParser: true})
  .catch((e) => {
    console.log(e);
  });

module.exports = {mongoose};

2 个答案:

答案 0 :(得分:0)

您是否尝试过单独连接它们?据我了解,您想同时连接它们。试试这个:

mongoose.connect(mlabDB , {useNewUrlParser: true})
  .catch((e) => {
    console.log(e);
  });

完成Atlas所需的所有操作之后,请再次为自己的数据库做所有事情。是的,您必须分别连接它们并进行处理。

mongoose.connect('mongodb://localhost:27017/TodoApp' , {useNewUrlParser: true})
      .catch((e) => {
        console.log(e);
      });

如果无法连接Atlas,则要连接自己的数据库。使用console.log查看未连接的地图集返回的内容。并添加一条if语句来检查连接是否发生。

答案 1 :(得分:0)

在代码中,有一行:

mlabDB || 'mongodb://localhost:27017/TodoApp'

变量mlabDB不会返回未定义,因为您将mlabDB定义为:

const mlabDB = `mongodb+srv://${process.env.MLAB_USERNAME}...

在这种情况下,如果process.env.MLAB_USERNAME未定义,则字符串将返回:

mongodb+srv://undefined

回答您的问题:“我如何同时连接图集集群和本地主机?”:使用JavaScript三元运算符:

const mlabDB = process.env.MLAB_USERNAME吗? mongodb+srv://${process.env.MLAB_USERNAME}:${process.env.MLAB_PASSWORD}@todo-app-qhj7g.mongodb.net/test?retryWrites=true&w=majority:``;

有关Heroku Config Vars, see here的更多信息。

对于本地vars管理,请使用npm的dotenv软件包。