Đó là vì đối tượng tài liệu bạn lấy lại từ mongoose không truy cập trực tiếp vào các thuộc tính. Nó sử dụng chuỗi nguyên mẫu do đó hasOwnProperty
trả về false (tôi đang đơn giản hóa điều này rất nhiều).
Bạn có thể thực hiện một trong hai điều sau:sử dụng toObject()
để chuyển đổi nó thành một đối tượng thuần túy và sau đó séc của bạn sẽ hoạt động như cũ:
var userPOJO = User.toObject();
if ( !(userPOJO.hasOwnProperty('local') && userPOJO.local.hasOwnProperty('password')) ) {...}
HOẶC bạn chỉ có thể kiểm tra các giá trị trực tiếp:
if ( !(User.local && User.local.password) ) {...}
Vì không thuộc tính nào có thể có giá trị giả nên nó sẽ hoạt động để kiểm tra nếu chúng được điền.
CHỈNH SỬA:Một kiểm tra khác mà tôi quên đề cập là sử dụng get
tích hợp sẵn của Mongoose phương pháp:
if (!User.get('local.password')) {...}