Dies liegt daran, dass das Dokumentobjekt, das Sie von Mongoose zurückerhalten, nicht direkt auf die Eigenschaften zugreift. Es verwendet die Prototypkette, daher hasOwnProperty
gibt false zurück (ich vereinfache das stark).
Sie können eines von zwei Dingen tun:Verwenden Sie toObject()
um es in ein einfaches Objekt umzuwandeln, und dann funktionieren Ihre Überprüfungen so wie sie sind:
var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
ODER Sie können einfach direkt nach Werten suchen:
if ( !(User.local && User.local.password) ) {...}
Da keine der Eigenschaften einen falschen Wert haben kann, sollte es zum Testen funktionieren, wenn sie gefüllt sind.
BEARBEITEN:Eine weitere Überprüfung, die ich vergessen habe zu erwähnen, ist die Verwendung von Mongooses eingebautem get
Methode:
if (!User.get('local.password')) {...}