これは、mongooseから取得したドキュメントオブジェクトがプロパティに直接アクセスしないためです。プロトタイプチェーンを使用するため、hasOwnProperty
falseを返します(これを大幅に簡略化しています)。
次の2つのいずれかを実行できます。toObject()
を使用する プレーンオブジェクトに変換すると、チェックはそのまま機能します:
var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
または、値を直接確認することもできます:
if ( !(User.local && User.local.password) ) {...}
どちらのプロパティも偽の値を持つことはできないため、データが入力されているかどうかをテストするために機能するはずです。
編集:私が言及するのを忘れたもう1つのチェックは、Mongooseの組み込みのget
を使用することです。 方法:
if (!User.get('local.password')) {...}