Je to proto, že objekt dokumentu, který získáte zpět od mongoose, nemá přímý přístup k vlastnostem. Používá prototypový řetězec, tedy hasOwnProperty
vrací false (velmi to zjednodušuji).
Můžete udělat jednu ze dvou věcí:použít toObject()
převést jej na prostý objekt a poté budou vaše kontroly fungovat tak, jak jsou:
var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
NEBO můžete hodnoty přímo zkontrolovat:
if ( !(User.local && User.local.password) ) {...}
Protože žádná z vlastností nemůže mít falešnou hodnotu, měla by fungovat pro testování, pokud jsou naplněny.
EDIT:Další kontrolou, kterou jsem zapomněl zmínit, je použití vestavěného get
Mongoose metoda:
if (!User.get('local.password')) {...}