2017-09-18 2 views
0

J'ai créé un module contenant un modèle mongoose (utilisateur) que je souhaite exporter. Pour l'instant, cela ne contient que le nom et l'âge des propriétés.Mongoose: déplacement des résultats find() vers un tableau dans le fichier

var mongoose = require('mongoose'); 
 
var db = mongoose.createConnection('localhost', 'moviemeter'); 
 

 
var schema = mongoose.Schema({name:String, age: Number}); 
 
var User = db.model('user', schema); 
 

 
module.exports = User;

Ici, je voudrais acces ce modèle et trouver tous les objets qu'il contient. Ensuite, j'aimerais pouvoir remplir ma variable userArr avec tous les utilisateurs de ma base de données, mais même si le premier fichier console.log renvoie le nom de cet objet, il ne le place pas dans le tableau. Quelle est la raison de cela et comment puis-je résoudre ce problème?

// user module 
 
var User = require('./modelModules/memberModel'); 
 
var userArr = []; 
 
var users = User.find({}, function (err, users) { 
 

 
    console.log(users[0].name) 
 
    users.forEach(function(user) { 
 

 
     userArr.push = user; 
 
    }); 
 
}); 
 
console.log(userArr[0].name)

+0

C'est un cas classique - _User.find_ est une opération asynchrone. Vous devez comprendre les concepts de base de la programmation asynchrone. Il n'est pas possible d'écrire du code procédural comme vous essayez de le faire avec async. Vos options utilisent Promises ou async/await. –

+0

Merci, je vais jeter un oeil à ces sujets. Pourriez-vous recommander une bonne ressource d'apprentissage pour cela? –

Répondre

0

Il est parce que vous utilisez forEach, qui est asynchon. Et votre pression doit être une fonction

userArr.push(yourUser) 

Pouvez-vous essayer avec un « pour » comme ça?

// user module 
var User = require('./modelModules/memberModel'); 
var userArr = []; 
User.find({}, function (err, users) { 

    console.log(users[0].name) 

    users.forEach(function(user) { 
    for (var i = 0; i < users.length; i++) { 
    userArr.push(user); 
    } 
    console.log(userArr[0].name); 
}); 

Espérons que cela aide.

0

Il semble un mauvais usage de la poussée de tableau, vous devez l'utiliser comme suit:

userArr.push(user); 
+1

Haha vous avez raison, erreur stupide. Malheureusement, il y a beaucoup plus de problèmes avec ce problème. –

+0

pas de problème, bonne chance –