我将我的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};
答案 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软件包。