Reputation: 1266
I'm using node.js express MongoDB and Mongoose to create rest api for my app. I'm wondering that there is any kind of type to replace such code like below for more generic? I do not want to pass all params all the time, but in only certain time. The most of time I just want to pass a part of them. Normally in Java, I create builder for such stuff, but I don't know any tricks for Javascript :)
exports.getMessages = function (req, res) {
var from = req.query.from;
var deleted = req.query.deleted;
var readed = req.query.readed;
if(from && deleted && readed) {
Message.find({to: req.user.email, from: from, deleted: deleted, readed: readed}, function(err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
})
} else if(from && deleted) {
Message.find({to: req.user.email, from: from, deleted: deleted}, function(err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
})
} else if (from && readed) {
Message.find({to: req.user.email, from: from, readed: readed}, function (err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
});
} else if(deleted && readed) {
Message.find({to: req.user.email, deleted: deleted, readed: readed}, function (err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
});
} else if(deleted){
Message.find({to: req.user.email, deleted: deleted}, function(err, messages) {
if(err) {
req.send(err);
}
res.json(messages);
})
} else if(readed){
Message.find({to: req.user.email, readed: readed}, function(err, messages) {
if(err) {
req.send(err);
}
res.json(messages);
});
} else if(from){
Message.find({to: req.user.email, from: from}, function(err, messages) {
if(err) {
req.send(err);
}
res.json(messages);
});
}
};
Upvotes: 1
Views: 1193
Reputation: 1273
Just build your find query object conditionally, i think this is as generic as it can get, just add to allowedParams
as needed
exports.getMessages = function (req, res) {
var allowedParams = [
'deleted',
'readed',
'from'
];
var query = {
to: req.user.email
};
for(param in req.query) {
if(allowedParams.indexOf(param) !== -1) {
query[param] = req.query[param];
}
}
Message.find(query, function (err, messages) {
if(err) {
res.send(err);
}
res.json(messages);
});
}
Upvotes: 1