我在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}));
答案 0 :(得分:3)
我看到正在发生MongoNetworkError,如果在本地而不是Heroku上一切正常,则可能是IP白名单。在进行任何连接之前,需要在MongoDB Atlas上将IP列入白名单。如果您不知道IP(heroku),可以将其设置为0.0.0.0/0
我过去也遇到过类似的问题,这对我有用。
答案 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。
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