La récupération de données à partir de MongoDB à l'aide de NodeJS avec Express
Ok, donc dans les derniers jours, j'ai commencé à jouer avec Nœud (parce que je pense que je devrais apprendre quelque chose qui est vraiment utile et peut me trouver un emploi). Maintenant, je sais comment servir les pages, de base et de routage. Nice. Mais je veux apprendre comment interroger des bases de données pour plus d'informations.
Droit maintenant, je suis en train de créer une application qui sert comme un webcomic site web. Donc, en théorie, l'application doit interroger la base de données lorsque je tape dans l'url http://localhost:3000/comic/<comicid>
J'ai le code suivant dans mon app.js fichier:
router.get('/', function(req, res) {
var name = getName();
console.log(name); //this prints "undefined"
res.render('index', {
title: name,
year: date.getFullYear()
});
});
function getName(){
db.test.find({name: "Renato"}, function(err, objs){
var returnable_name;
if (objs.length == 1)
{
returnable_name = objs[0].name;
console.log(returnable_name); //this prints "Renato", as it should
return returnable_name;
}
});
}
Avec cette configuration, j'obtiens console.log(getName())
à la sortie de "undefined" dans la console, mais je n'ai aucune idée de pourquoi il ne reçoit pas le seul élément que la requête peut effectivement trouver dans la base de données.
J'ai essayé de chercher dans la et même pour des exemples dans Google, mais sans succès.
Comment diable suis-je censé trouver le paramètre nom de l'objet?
OriginalL'auteur Renato Oliveira | 2015-01-17
Vous devez vous connecter pour publier un commentaire.
NodeJs est asynchrone. Vous avez besoin d'un rappel ou un Promesse.
Vous devez ajouter le rendu sur le rappel ?
Je ne comprends pas ce que tu veux dire. Le code ressemble à la vôtre. Pour obtenir de l'information à partir de getName, en les confiant à "nom", puis de l'utiliser dans la res.render().
Oh non, désolé! Mon mauvais. J'étais avec res.rendu à l'extérieur de la getName appel. Elle fonctionne.
OriginalL'auteur MaximeF
La
getName
fonction est de faire un appel asynchrone de Mongo avecdb.test.find
. Vous pouvez voir cela en ajoutant unconsole.log
après la fonction async. Comme ceci:Selon toute vraisemblance, ce sera de sortie:
Vous devez fournir un rappel de votre
getName
fonction.OriginalL'auteur Jordonias