J'essaie d'extraire des données en utilisant de la mangouste.
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: promesse non gérée rejet (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 où je me trompais.
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const post = require('../models/post');
const db = "mongodb://<dbuser>:<dbpassword>@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 aussi 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’ajouter 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 mongoose
disponible sous forme de promesse globale mongoose.Promise = global.Promise
, vous devez gérer la promesse à l'aide de .then()
et .catch()
Voici comment:
...
mongoose.Promise = global.Promise;
mongoose.connect(db)
.then(res => console.log("Connected to DB"))
.catch(err => console.log(err))
...