2017-10-11 6 views
0

Je n'arrive pas à comprendre ce qui ne va pas. Est-ce que quelqu'un sait pourquoi je reçois cette erreur? J'utilise Node, Express, MongoDB avec Mongoose.Problème Iterating MongoDB Tableau d'objets

Voici le code, les lignes console.log() sont juste pour déboguer et ils sont ce qui jette l'erreur.

// report view 
app.get("/report", isLoggedIn, function(req, res){ 
    User.findById(req.user._id, function(err, foundUser){ 
     if(err){ 
      console.log(err); 
      console.log(foundUser); 
     } else { 
      console.log(foundUser); 
      console.log(); 
      console.log(foundUser.purchases[0].phrase); 
      res.render("report.ejs", {user:foundUser}); 
     } 
    }); 
}); 

Voici le document user dans MongoDB:

{ 
    "_id" : ObjectId("59d4dc48fba3ef12437bf4b1"), 
    "salt" : "30dd9c9942...", 
    "hash" : "8c8c96d88a708...", 
    "username" : "Christian Lewis", 
    "email" : "[email protected]", 
    "signupDate" : ISODate("2017-10-04T13:04:08.167Z"), 
    "__v" : 6, 
    "purchases" : [ 
     { 
      "phrase" : "Porche 918 Spyder", 
      "location" : "South Yarra" 
     }, 
     { 
      "phrase" : "Blinds", 
      "location" : "United Kingdom" 
     } 
    ] 
} 

Et voici tout ce qui sort de la console:

{ _id: 59d4dc48fba3ef12437bf4b1, 
    username: 'Christian Lewis', 
    email: '[email protected]', 
    __v: 6, 
    signupDate: 2017-10-04T13:04:08.167Z, 
    purchases: 
    [ { location: 'South Yarra', phrase: 'Porche 918 Spyder' }, 
    { location: 'United Kingdom', phrase: 'Blinds' } ] } 

events.js:160 
     throw er; // Unhandled 'error' event 
    ^

TypeError: Cannot read property 'phrase' of undefined 
    at /Volumes/Store/Lickety-Split/website/app.js:58:47 
    at Query.<anonymous> (/Volumes/Store/Lickety-Split/website/node_modules/mongoose/lib/model.js:3841:16) 
    at /Volumes/Store/Lickety-Split/website/node_modules/kareem/index.js:273:21 
    at /Volumes/Store/Lickety-Split/website/node_modules/kareem/index.js:131:16 
    at _combinedTickCallback (internal/process/next_tick.js:73:7) 
    at process._tickCallback (internal/process/next_tick.js:104:9) 

Je ne peux pas trouver une réponse à cela, je peux Ne repérez pas l'erreur, alors je m'excuse si c'est une question en double. Et merci pour toute aide.

+1

La raison typique est que votre schéma défini ne correspond pas à la structure du document. Vous devriez vraiment corriger le schéma (qui manque à la question), mais à la rigueur, ajouter '.lean()' ie. 'User.findById (req.user.id) .lean(). Exec (function (err, foundUser) {..' devrait vous donner une solution de contournement immédiate.Affichez le schéma si vous avez besoin de la correction expliqué –

+0

Vous semblez avoir J'ai corrigé Neil, j'ai réécrit cette section du schéma et ça fonctionne maintenant Merci beaucoup Et merci pour ce conseil sur '.lean()'. – Inertia

+0

Il s'agit vraiment de votre schéma. dans votre schéma ne correspond pas à la même forme que les données que vous avez stockées.Vous pouvez aussi utiliser des méthodes comme 'founduser.get ('achats')' pour les choses qui ne sont pas définies correctement et qui n'ont pas d'accesseurs assignés par défaut "mismatch" dans "shape" mais cela n'aide pas vraiment dans "templates" Donc vous utilisez soit '.lean()' ou d'autres méthodes pour convertir les données stockées en un objet JavaScript "brut", ou simplement corrigez le schéma –

Répondre

0

L'erreur se produit sur cette ligne

console.log(foundUser.purchases[0].phrase); 

Cela suggère tableau foundUser.purchases est vide, mais en fonction de vos données enregistrées, ce n'est pas.

Pouvez-vous confirmer que les données affichées sont en fait les informations de journal correctes.

+0

Je peux confirmer à coup sûr que les données que j'ai montrées sont les données ciblées. Je viens de le faire fonctionner. Le commentaire de Neil Lunn semble avoir été correct. Je ne sais toujours pas exactement quel était le problème, mais son commentaire m'a inspiré réécrire cette partie du schéma et ça marche maintenant. Merci pour votre suggestion, très appréciée. – Inertia