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.
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é –
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
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 –