3
votes

Mongodb atlas + node.js fonctionne localement mais s'arrête lorsqu'il est poussé vers Heroku

J'ai créé un itinéraire de publication sur mon site Web node.js qui permet aux utilisateurs de postuler à un emploi. Cela fonctionnait très bien localement et se connectait à l'atlas mongodb, mais lorsque j'ai poussé l'application vers Heroku et que j'ai essayé de soumettre le formulaire de candidature, mon site Web expire. Je suis assez nouveau dans ce domaine et je ne sais pas quoi faire. Merci

​​Voici mon code

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}));

voici mon terminal lorsque je lance les logs heroku entrez la description de l'image ici


4 commentaires

Veuillez ne pas publier de captures d'écran de texte . Ils ne peuvent pas être recherchés ou copiés et offrent une faible convivialité. Au lieu de cela, collez le code sous forme de texte directement dans votre question. Si vous le sélectionnez et cliquez sur le bouton {} ou Ctrl + K, le bloc de code sera indenté de quatre espaces, ce qui le rendra sous forme de code.


Vous voulez que je poste le journal sous forme de texte brut?


Je vois que MongoNetworkError se produit, et si les choses fonctionnent bien au niveau local mais pas chez heroku, alors la liste blanche IP pourrait être le problème. IP doit être mis sur liste blanche sur MongoDB Atlas avant de procéder à une connexion. Au cas où vous ne connaissez pas l'IP (heroku), vous pouvez le mettre comme 0.0.0.0/0


Si la réponse ci-dessous (liste blanche des adresses IP) a résolu votre problème, veuillez l'accepter comme réponse correcte. Cela aidera aussi les autres. Merci.


4 Réponses :


10
votes

Je vois que MongoNetworkError se produit, et si les choses fonctionnent bien en local mais pas chez Heroku, alors la liste blanche IP pourrait être le problème. IP doit être mis sur liste blanche sur MongoDB Atlas avant de procéder à une connexion. Au cas où vous ne connaissez pas l'IP (heroku), vous pouvez le mettre comme 0.0.0.0/0

 IP whiltelisting sur MongoDB Atlas (sous l'onglet de sécurité)

J'ai été confronté à un problème similaire dans le passé et cela a fonctionné pour moi.


0 commentaires

1
votes

J'ai ajouté mon adresse IP à la liste blanche de l'atlas mongodb et mis à jour mon code pour enregistrer l'URI en tant que variable et cela fonctionne maintenant dans la production Heroku. Voici mon code qui a fini par fonctionner.

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

retryWrites=true";


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


0 commentaires

2
votes

J'ai rencontré le même problème quand j'ai essayé de passer de mlab à Atlas MangoDb. Donc, la solution que j'ai trouvée a été d'ajouter des variables de configuration dans votre application Heroku.

  1. Accédez à votre application Heroku, cliquez sur Paramètres
  2. Cliquez sur Reveal Config Vars
  3. ajouter une nouvelle clé: MONGODB_URL
  4. ajoutez une nouvelle valeur: VOTRE STRING DE CONNEXION
  5. actualisez votre application Heruko et vous êtes prêt à partir.

PS: Assurez-vous que votre dbconnection fonctionne. En cas de questions, je vais quitter ma connexion pour comparer:

  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);
  });```


0 commentaires

1
votes

Votre MongoDB fonctionne-t-il sur GCP ou Azure? Si tel est le cas, ils nécessitent une liste blanche d'adresses IP de 0.0.0.0/0, puis Redémarrez tous les Dynos sur la console de votre navigateur Heroku (il se trouve dans le menu déroulant Plus en haut à droite).

Ces articles ont été utiles: https://docs.atlas.mongodb.com/security-whitelist/ < / p>

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


0 commentaires