Mongodb Atlas + Node.js在本地工作,但是在推送到Heroku时停止

时间:2019-03-28 21:55:33

标签: node.js mongodb heroku mongoose

我在node.js网站上创建了一条发布路线,该路线允许用户申请工作。它在本地运行良好,并连接到mongodb地图集,但是当我将应用程序推送到Heroku并尝试为工作申请表提交表单时,我的网站超时了。我对此很陌生,不知道该怎么办。谢谢

这是我的代码

var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var Applicant = require('./models/applicants');
var sendAppliedEmail = require('./mail/index.js');

var app = express();
app.set('view engine', 'ejs');
app.use(express.static(__dirname + "/public"));
app.use(express.static(__dirname + '/js'));
var port = process.env.PORT || 3000;

mongoose.connect('mongodb+srv://klaurtar:************@cluster0-nakj7.mongodb.net/test?retryWrites=true', {useNewUrlParser: true});
app.use(bodyParser.urlencoded({extended: true}));

运行heroku日志时这是我的终端 enter image description here

4 个答案:

答案 0 :(得分:3)

我看到正在发生MongoNetworkError,如果在本地而不是Heroku上一切正常,则可能是IP白名单。在进行任何连接之前,需要在MongoDB Atlas上将IP列入白名单。如果您不知道IP(heroku),可以将其设置为0.0.0.0/0

IP whiltelisting at MongoDB Atlas (under security tab)

我过去也遇到过类似的问题,这对我有用。

答案 1 :(得分:1)

我在mongodb地图集上将我的IP列入了白名单,并更新了代码以将uri保存为变量,现在它可以在Heroku生产中使用了。这是我的代码,最终起作用了。

var uri = "mongodb+srv://klaurtar:************@cluster0-nakj7.mongodb.net/test?

retryWrites=true";


mongoose.connect(uri, {useNewUrlParser: true});
var db = mongoose.connection;

答案 2 :(得分:1)

当我尝试从mlab迁移到Atlas MangoDb时,我遇到了同样的问题。因此,我发现的解决方案是在您的Heroku应用程序中添加config vars。

  1. 转到您的Heroku应用程序,然后单击“设置”
  2. 单击“显示配置变量”
  3. 添加新密钥:MONGODB_URL
  4. 添加新值:您的连接字符串
  5. 刷新您的Heruko应用程序,一切顺利。

PS:确保您的数据库连接正常。如有疑问,我将离开我的联系进行比较:

  mongoCFG = {
    useNewUrlParser: true,
    ssl: true,
    replicaSet: '<clusterName>-shard-0',
    authSource: 'admin',
    retryWrites: true,
    useUnifiedTopology: true,
  }

console.log('Attempting to connect to mongoose');
mongoose.connect(config.mongoURL, mongoCFG)
  .then(() => {
    console.log("Connected to Mongo database!");
  })
  .catch(err => {
    console.error("App starting error:", err.stack);
  });```

答案 3 :(得分:0)

您的MongoDB是否在GCP或Azure上运行?如果是这样,他们要求IP白名单为0.0.0.0/0,然后在Heroku浏览器控制台上重新启动所有Dynos(位于右上方的“更多”下拉列表中)。

这些文章很有帮助: https://docs.atlas.mongodb.com/security-whitelist/

.17于:https://cloud.google.com/community/tutorials/mongodb-atlas-appengineflex-nodejs-app