2017-01-24 12 views
1

Ich habe die folgende Schnellstraße:Aufschalten ein Mungo Modell Methode

app.post('/users/me',(req, res) => { 
    var body = req.body.email; 
    User.find({ 
    email: body 
    }).then((user) => { 
    res.send({user}); 
    }, (e) => { 
    res.status(400).send(e); 
    }); 
}); 

Auf meinem User-Modell ich die folgende Methode haben die Ergebnisse zurückgegeben begrenzt auf E-Mail und _id:

UserSchema.methods.toJSON = function() { 
    var user = this; 
    var userObject = user.toObject(); 

    return _.pick(userObject, ['_id', 'email']); 
}; 

In den meisten Meine Routen das ist genau was ich will aber auf dieser speziellen Route möchte ich noch weitere Felder zurückgeben. Wie kann ich die Modellmethode überschreiben/umgehen und meine Felder zurückgeben lassen?

Antwort

0

Ich fand, dass ich eine zusätzliche Methode erstellen und es in der res.send() aufrufen. Zum Beispiel, wenn ich wollte Passwort als Teil der Rückkehr füge ich eine neue Methode erstellen:

UserSchema.methods.toPrivateJSON = function() { 
    var user = this; 
    var userObject = user.toObject(); 
    return _.pick(userObject, ['_id', 'email', 'activeAccount', 'password']); 

}; 

Da ist in meinem Weg, wenn ich die Benutzer-Objekt zurück nenne ich

res.send(user.toPrivateJSON()); 

Dies wird berufen die toPrivateJSON() Methode und geben Sie die zusätzlichen Felder zurück, die benötigt werden.

0
app.post('/users/me',(req, res) => { 
    var body = req.body.email; 
    User.find({ 
    email: body 
    }).then((user) => { 
    user.private = true; //tells to model method to include additional fields 
    res.send({user}); 
    }, (e) => { 
    res.status(400).send(e); 
    }); 
}); 

Dann in der Modellmethode:

UserSchema.methods.toJSON = function() { 
    var user = this; 
    var userObject = user.toObject(); 
    if(user.private) 
     return _.pick(userObject, ['_id', 'email', 'additionalField']); 
    else 
     return _.pick(userObject, ['_id', 'email']); 
}; 
+0

Dies funktioniert nicht. Ich habe einige Conole-Logging hinzugefügt und ich sehe, dass in der Model-Methode die If (user.private) wird falsch zurückgegeben wird so überspringt, um die else. – dwax

+0

Dies sollte mit einem einzelnen Objekt funktionieren, aber wenn mehrere Objekte zurückgegeben werden, muss man über jedes Objekt iterieren, um den 'privaten' Wert zu setzen – sidgate