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}));
4 Réponses :
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
J'ai été confronté à un problème similaire dans le passé et cela a fonctionné pour moi.
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;
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.
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); });```
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
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.