如何将 heroku 连接到 MongoDB Atlas

我一直在做噩梦,试图将我的 heroku 应用程序连接到 MongoDB Atlas,因为 mLab 现在已作为 Heroku 插件删除。

我遇到的问题是,我似乎无法将我的应用程序连接到我的 Atlas DB。

  1. 我在 Atlas 中创建了一个集群。
  2. 将我的集群 IP 地址设置为 0.0.0.0/0
  3. 在 Heroku 中更新了我的配置变量。

似乎我的应用在本地运行良好...

为了增加一些复杂性,几年前,我可以在本地运行 mongoose,只需运行 mongod 命令。但是,由于 MacOS Catalina 更新,这似乎已停止工作......我的终端无法 /data/db 目录:

MongoDB can't find data directory after upgrading to Mac OS 10.15 (Catalina)

所以我按照说明创建了一个新的 /data/db 文件夹。这在本地工作,如果我运行: mongod --dbpath=/Users/reenaverma/MongoData

所以在本地,我可以使用我的应用程序并完全更新数据库。

但是,当我在 PROD/heroku 中访问我的应用程序时,每次我尝试登录或执行 REST/DB 操作(例如获取请求)时,我都会收到 503 错误。所以我知道,我的数据库没有在 PROD/heroku 中连接。

关于我缺少的东西,我的想法已经用完了。

我的 mongo --version 是 MongoDB shell 版本 v3.6.2。

这是我的 index.js 的样子。任何想法,将不胜感激!

const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const bodyParser = require('body-parser');
const methodOverride = require('method-override');
const mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
const router = require('./config/router');
const session = require('express-session');
const flash = require('express-flash');
const userauth = require('./lib/userauth');


const app = express();
const PORT = process.env.PORT || 8000; 

// CONNECT TO THIS DATABASE
mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost/music-database',{ useNewUrlParser: true,useUnifiedTopology: true });
mongoose.set('useCreateIndex',true);

// SET EJS USE
app.set('view engine','ejs');
app.set('views',`${__dirname}/views`);
app.use(expressLayouts);
app.use(express.static(`${__dirname}/public`));


// ENSURES FORM DATA IS LISTENED TO AND CAPTURED
app.use(bodyParser.urlencoded({ extended: true }));
app.use(methodOverride(req => {
  if(req.body && typeof req.body === 'object' && '_method' in req.body) {
    const method = req.body._method;
    delete req.body._method;
    return method;
  }
}));

// SETTING UP SESSION COOKIE
app.use(session({
  secret: 'xxxx(',// a random key used to encrypt the session cookie
  resave: false,saveUninitialized: false
}));

// setup flash messages must be AFTER express-session
app.use(flash());

app.use(userauth);
app.use(router);

// GLOBAL ERROR CATCHER FOR 422 and 500
app.use((err,req,res,next) => {
  if(err.name === 'ValidationError') return res.render('pages/422');
  res.render('pages/500',{ err });
  next(err); //display error in terminal/also a callback function
});

// PORT LISTENER - MUST BE AT BOTTOM
app.listen(PORT,() => console.log(`Up and running on port ${PORT}`));

这是我的配置变量在 Heroku 中的外观:

如何将 heroku 连接到 MongoDB Atlas

nbayjj 回答:如何将 heroku 连接到 MongoDB Atlas

ConfigVar 拼写错误:它应该是 MONGODB_URI 而不是 MONGDB_URI

,

您可以尝试使用

创建一个 .env 文件
DB_CONNECT = mongodb+srv://username:password@cluster0.hmd0i.mongodb.net

安装 npm install dotenv 并像这样在你的 index.js 文件中要求它 https://ibb.co/sKSFhkn

,

我想出了那个答案!我意识到我没有为我的 Config vars 键设置正确的值(以前没有包括我的密码,也没有包括 ?retryWrites=true&w=majority)。

如果您通过终端设置 Heroku,您的命令应如下所示:

heroku config:set MONGODB_URI="mongodb+srv://<YOUR_USERNAME>:<YOUR_PASSWORD>@cluster-popuplondon.i2thd.mongodb.net/<YOUR_DATABASE_NAME>?retryWrites=true&w=majority"

这 100% 解决了问题。

本文链接:https://www.f2er.com/1186869.html

大家都在问