Het is omdat het documentobject dat u terugkrijgt van mangoest niet rechtstreeks toegang heeft tot de eigenschappen. Het gebruikt de prototypeketen, vandaar hasOwnProperty
false retourneren (ik vereenvoudig dit enorm).
U kunt twee dingen doen:gebruik toObject()
om het naar een gewoon object te converteren en dan zullen uw controles werken zoals het is:
var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
OF u kunt gewoon rechtstreeks naar waarden zoeken:
if ( !(User.local && User.local.password) ) {...}
Aangezien geen van beide eigenschappen een valse waarde kan hebben, zou het moeten werken om te testen als ze zijn ingevuld.
EDIT:Een andere controle die ik vergat te vermelden, is het gebruik van Mongoose's ingebouwde get
methode:
if (!User.get('local.password')) {...}