我有以下快递路线:
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的结果:
UserSchema.methods.toJSON = function () {
var user = this;
var userObject = user.toObject();
return _.pick(userObject, ['_id', 'email']);
};
在我的大多数路线中,这正是我想要的,但是在这个特定路线中我想要返回其他字段。如何覆盖\绕过模型方法并返回我的字段?
答案 0 :(得分:2)
我发现我可以创建一个额外的方法并在res.send()中调用它。 例如,如果我想在返回时添加密码,我可以创建一个新的方法:
UserSchema.methods.toPrivateJSON = function () {
var user = this;
var userObject = user.toObject();
return _.pick(userObject, ['_id', 'email', 'activeAccount', 'password']);
};
然后在我的路线中,当我返回用户对象时,我调用
res.send(user.toPrivateJSON());
这将调用toPrivateJSON()
方法并返回所需的其他字段。
答案 1 :(得分: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']);
};