Comment résoudre UnhandledPromiseRejectionWarning chez la mongoose?

J’essaie de récupérer des données en utilisant de la mongoose.

Donc, chaque fois que je dois récupérer les messages de l’API – localhost: 3000 / api / posts – j’obtiens l’erreur suivante que je suis incapable de décrypter.

(node: 12100) UnhandledPromiseRejectionWarning: rejet de promesse non gérée (r
ID d’éjection: 1): [MongoError: connect ETIMEDOUT xxxx]

Le foll est mon code dans le fichier api.js. J’apprécierais si vous pouviez me guider sur les points qui me dérangent.

const express = require('express'); const router = express.Router(); const mongoose = require('mongoose'); const post = require('../models/post'); const db = "mongodb://:@xxxxxxx.mlab.com:xxxxxx/xxxxxx"; mongoose.Promise = global.Promise; mongoose.connect(db, function(err) { if(err) { console.log('Connection error'); } }); router.get('/posts', function(req, res) { console.log('Requesting posts'); post.find({}) .exec(function(err, posts) { if (err) { console.log('Error getting the posts'); } else { res.json(posts); console.log(posts); } }); }); //in order for server.js file to access the api, we have to add the foll line module.exports = router; 

23 mai 2017

Maintenant, je reçois également un avertissement de dépréciation alors qu’en fait, j’ai inclus le loc suivant:

 mongoose.Promise = global.Promise; //we add this because if we dont, you may get a warning that mongoose's default promise library is deprecated 

J’apprécierais si je pouvais obtenir des conseils sur cette question. Merci

Vous avez besoin d’un gestionnaire de rejet pour votre code, par exemple:

  router.get('/posts', function(req, res) { console.log('Requesting posts'); post.find({}) .exec() .then(function(posts) { res.json(posts); console.log(posts); }) .catch(function(error){ console.log('Error getting the posts'); }); }); 

Ou n’utilisez pas de chaîne de promesse, utilisez simplement la fonction de rappel:

 router.get('/posts', function(req, res) { console.log('Requesting posts'); post.find({}, function(err, posts){ if (err) { console.log('Error getting the posts'); } else { res.json(posts); console.log(posts); } }) }); 

La bonne façon de le gérer est d’append une clause catch.

 const mongoose = require('mongoose'); mongoose.connect(process.env.MONGODB_URI).catch(function (reason) { console.log('Unable to connect to the mongodb instance. Error: ', reason); }); 

Ajouter ma réponse car les autres ne donnent pas une image claire.

Puisque vous rendez la mongoose disponible en tant que promesse globale mongoose.Promise = global.Promise vous devrez gérer la promesse en utilisant .then() et .catch()

Voici comment:

 ... mongoose.Promise = global.Promise; mongoose.connect(db) .then(res => console.log("Connected to DB")) .catch(err => console.log(err)) ...