在这个问题的底部,我有代码:console.log("returnAnonModel -----", returnAnonModel, "typeof : ", typeof returnAnonModel)
,它记录returnAnonModel
是一个对象。我不明白为什么其他条件不会被击中。
首先让我告诉你它记录的内容:
returnAnonModel ----- { _id: 57d0d00c50ed1a2421749a69,
__v: 0,
usefulness: [],
reviews: [] } typeof : object
问题很简单。你看到了对象,但if条件中的Object.keys(returnAnonModel).length > 0
显然不正确。这个物体的长度不应该是4?我不应该在里面看到控制台吗? console.log("***********Anon USER SEARCHING*********************************")
没有显示
代码:
var modelType = undefined;
Anon.findOne({_id : app.locals.user._id})
.then(function( returnAnonModel){
console.log("returnAnonModel -----", returnAnonModel, "typeof : ", typeof returnAnonModel)
if(err) console.log(err);
if( Object.keys(returnAnonModel).length > 0 ){
console.log("***********Anon USER SEARCHING*********************************")
modelType = Anon
userOrAnonArr()
}else{
console.log("***********USER USER SEARCHING*********************************")
modelType = User
userOrAnonArr(modelType)
}
function userOrAnonArr(modelType){
console.log("modelType: ", modelType, " app.locals.user._id : ", typeof app.locals.user._id )
modelType.findOne({_id : app.locals.user._id}, function(err, returnUser){
if(err) console.log(err);
console.log("returnUser : ", returnUser )
有趣的是:
我尝试通过这样做来测试对象的长度:
console.log("Object.keys(returnAnonModel).length", Object.keys(returnAnonModel).length)
并返回Object.keys(returnAnonModel).length 10
,因此长度为10.我认为mongoose会添加属性。
但是当我做的时候
console.log("Object.keys(returnAnonModel).length", Object.keys(returnAnonModel).toObject().length)
它完全没有记录。为什么呢?
最后修改
这很有效。我一直试图做这个功能。而且我不知道为什么它现在有效,而不是之前。我认为它与控制台有关。
var modelType = undefined;
Anon.findOne({_id : app.locals.user._id})
.then(function( returnAnonModel){
console.log("*******", returnAnonModel ,"***********88")
// console.log("returnAnonModel -----", returnAnonModel, "typeof : ", typeof returnAnonModel)
// console.log("Object.keys(returnAnonModel).length", Object.keys(returnAnonModel.toObject()).length)
// console.log("returnAnonModel.toObject()---", returnAnonModel.toObject())
if(returnAnonModel){
modelType = Anon;
userOrAnonArr(modelType);
console.log("*************Anon user found*********************");
}else{
modelType = User;
userOrAnonArr(modelType);
console.log("*************Anon user NOT found*************")
}
答案 0 :(得分:0)
Object.keys()
函数不包含对象的所有属性。它仅包含符合以下2个标准的属性:
Object.keys()
不沿着可能存在的任何原型链查看。enumerable
属性定义属性。从代码中不清楚returnAnonModel
对象是如何构建的,但我的猜测是属性不符合列出的两个标准。