Ich kann einfach nicht herausfinden, was damit nicht stimmt. Weiß jemand, warum ich diesen Fehler bekomme? Ich verwende Node, Express, MongoDB mit Mongoose.Problem Iterating MongoDB Array von Objekten
Hier ist der Code, die console.log()
Zeilen sind nur zu debuggen und sie sind was den Fehler werfen.
// 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});
}
});
});
Hier ist das user
Dokument in 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"
}
]
}
Und hier ist alles, was aus der Konsole kommt:
{ _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)
Ich kann keine Antwort auf diese Frage finden, kann ich Ich werde den Fehler nicht finden, also entschuldige ich mich, wenn das eine doppelte Frage ist. Und danke für jede Hilfe.
Der typische Grund ist, dass Ihr definiertes Schema nicht mit der Dokumentstruktur übereinstimmt. Sie sollten das Schema wirklich korrigieren (was in der Frage fehlt), aber zur Not, '.lean()' ie hinzufügen. 'User.findById (req.user._id) .lean(). Exec (function (err, foundUser) {..' sollte Ihnen eine sofortige Abhilfe bieten. Zeigen Sie das Schema, wenn Sie die Korrektur benötigen. –
Sie scheinen zu haben war korrekt Neil. Ich habe diesen Abschnitt des Schemas umgeschrieben und es funktioniert jetzt. Vielen Dank. Und vielen Dank für diesen Tipp auf '.lean()'. – Inertia
Es geht wirklich um Ihr Schema. Das Problem ist, dass 'Käufe' wie definiert in Ihrem Schema nicht mit der Form übereinstimmt, die Sie gespeichert haben Sie können Methoden wie 'founduser.get ('purchases')' für Dinge verwenden, die nicht korrekt definiert sind und denen aufgrund der stimmt nicht mit "shape" überein, aber das hilft nicht wirklich in "templates". Entweder verwenden Sie '.lean()' oder andere Methoden, um die gespeicherten Daten in ein "rohes" JavaScript-Objekt zu konvertieren oder einfach das Schema zu reparieren. –