2017-04-17 2 views
0

Was ich versuche zu tun ist, lassen Sie den Benutzer eine Liste der Beiträge erhalten, die sie zu ihren Favoriten hinzugefügt haben, indem Sie einfach ihre _id in den Favoriten-Array des Beitrags setzen.mongoose Antwort odd Format

Wenn diese bestimmte Abfrage ausgeführt wird, kommt sie als Array mit unbenannten Einträgen zusammen mit _locals im Array zurück.

Ich brauche etwas mehr wie Posts: [{}, {}], _locals.

Wie bekomme ich es in dieses Format?

var UserSchema = new Schema({ 
 
    username : String, 
 
    firstName : String, 
 
    lastName : String, 
 
    email  : String, 
 
    password : String 
 
}); 
 

 
var PostSchema = new Schema({ 
 
    author : { type: Schema.Types.ObjectId, ref: 'User' }, 
 
    date  : Date, 
 
    body  : String, 
 
    username : String, 
 
    sid  : String, 
 
    views  : Number, 
 
    likes  : [{ type: Schema.Types.ObjectId, ref: 'User' }], 
 
    favorites : [{ type: Schema.Types.ObjectId, ref: 'User' }] 
 
}); 
 

 
and the get 
 

 
app.get('/favorites', function(req, res) { 
 
    Post 
 
    .find({ 'favorites': '58f4f9e5650785228016287f'}) 
 
    .exec(function(err, favorites) { 
 
    res.render('favorites', favorites) 
 
    console.log(favorites) 
 
    }) 
 
}); 
 

 
I get a response of 
 
[ { _id: 58f4f9e96507852280162880, 
 
    author: 58f4f9e5650785228016287f, 
 
    body: 'test', 
 
    date: 2017-04-17T17:22:49.059Z, 
 
    username: 'test', 
 
    sid: 'BJ-xquGRl', 
 
    __v: 2, 
 
    favorites: [ 58f4f9e5650785228016287f ], 
 
    likes: [] }, 
 
    { _id: 58f500edd8abc7242c90d61c, 
 
    author: 58f4f9e5650785228016287f, 
 
    body: 'w00p w00p', 
 
    date: 2017-04-17T17:52:45.612Z, 
 
    username: 'test', 
 
    sid: 'BJ8g-tG0e', 
 
    __v: 1, 
 
    favorites: [ 58f4f9e5650785228016287f ], 
 
    likes: [] }, 
 
    _locals: { user: 
 
    { id: 58f4f9e5650785228016287f, 
 
     username: 'test', 
 
     firstName: 'test', 
 
     lastName: 'test', 
 
     email: '[email protected]' } } ]

Antwort

1

Das _locals etwas ist, das Express zum Objekt hinzufügt, die Sie res.render() passieren. Wenn Sie die Funktion umkehren würde ruft Sie gemacht, wäre es nicht mehr da sein:

console.log(favorites); 
res.render('favorites', favorites); 

jedoch das Hauptproblem ist, dass Sie ein Array (favorites) als Argument an res.render(), vorbei sind, die ein Objekt erwartet stattdessen. Die korrekte Art, es aufzurufen, wäre, indem favorites als Objektwert übergeben wird:

res.render('favorites', { favorites : favorites }); 
// Or in recent Node versions: 
// res.render('favorites', { favorites });