2017-01-24 10 views
1

나는 다음과 같은 명시 적 경로가 : 대부분에서재정 몽구스 모델 방법

UserSchema.methods.toJSON = function() { 
    var user = this; 
    var userObject = user.toObject(); 

    return _.pick(userObject, ['_id', 'email']); 
}; 

:

app.post('/users/me',(req, res) => { 
    var body = req.body.email; 
    User.find({ 
    email: body 
    }).then((user) => { 
    res.send({user}); 
    }, (e) => { 
    res.status(400).send(e); 
    }); 
}); 

내 사용자 모델에 나는 결과를 제한하는 다음과 같은 방법을 이메일로 반환하고 _id를 그러나이 특정 경로에서 원하는 경로를 정확하게 추가 경로로 반환하고 싶습니다. 어떻게하면 모델 메서드를 무시하고 필드를 반환 할 수 있습니까? 그런 다음 모델 방법에

답변

0

내가 추가 방법을 생성하고 res.send에서 호출 할 수 있음을 발견(). 나는 사용자 개체 내가이 호출합니다

res.send(user.toPrivateJSON()); 

전화 돌아올 때 내 경로에서 다음

UserSchema.methods.toPrivateJSON = function() { 
    var user = this; 
    var userObject = user.toObject(); 
    return _.pick(userObject, ['_id', 'email', 'activeAccount', 'password']); 

}; 

: 예를 들어 는 내가 새로운 방법을 만들 수있는 수익의 일부로서 암호를 추가하고자한다면 toPrivateJSON() 메서드를 호출하고 필요한 추가 필드를 반환합니다.

0
app.post('/users/me',(req, res) => { 
    var body = req.body.email; 
    User.find({ 
    email: body 
    }).then((user) => { 
    user.private = true; //tells to model method to include additional fields 
    res.send({user}); 
    }, (e) => { 
    res.status(400).send(e); 
    }); 
}); 

가 :

UserSchema.methods.toJSON = function() { 
    var user = this; 
    var userObject = user.toObject(); 
    if(user.private) 
     return _.pick(userObject, ['_id', 'email', 'additionalField']); 
    else 
     return _.pick(userObject, ['_id', 'email']); 
}; 
+0

이것은 작동하지 않습니다. 내가 conole 로깅을 추가하고 모델 메서드에서 if (user.private)가 false로 반환되어 다른 것으로 건너 뛴다는 것을 알았습니다. – dwax

+0

이것은 단일 객체와 함께 작동해야하지만 여러 객체가 반환되면 각 객체에 대해 반복하여 'private'값을 설정해야합니다 – sidgate