功能"/>
req.query的过滤功能
目前我有这个:
router.get('/contatos',function(req,res){
if(req.query.nome){
Contato.find({ nome: req.query.nome }, function (err, contato) {
console.log(contato);
if (JSON.stringify(contato) == "[]") {
return res.status(404).json({ Error: "that contact doesn't exist" });
}
if (err) {
return res.status(500);
}
return res.send(contato);
});
}
if(req.query.email){
Contato.find({ email: req.query.email }, function (err, contato) {
if (!contato) {
return res.status(404).json({ Error: "that contact doesn't exist" });
}
if (err) {
return res.status(500);
}
return res.send(contato);
});
}
if(Object.keys(req.query).length === 0){
Contato.find(function (err, contatos) {
if (JSON.stringify(contatos) == "{}") {
return res.status(404).json({ Error: "there are no contacts" });
}
if (err) {
return res.status(500);
}
return res.send(contatos);
}).populate('emergencia');
}
if(!req.query.nome && !req.query.email){
return res.status(400);
}
});
如你们所见,mongo查询几乎唯一相同的是更改了我传递的值,因此要更改此值,我尝试执行以下功能:
function filtro(campo,valor,req,res){
if(arguments[0] != "undefined" && arguments[1] != "undefined"){
// i pass no parameters to filtro so here i just get all values
}
else{
Contato.find({campo:valor},function(err,contatos){
if(err){
return res.status(500);
}
return res.send(contatos);
});
}
}
然后在上面的第一个代码中,我将return filtro("email",req.query.email)
数据替换为return filtro("email",req.query.email)
并 return filtro("nome",req.query.nome)
我想知道我在做的事是否正确,我只是想念一些东西,因为在邮递员那里,它没有给我任何回应,它会不断加载
回答如下:为了简化一点,您可以执行类似...的操作。
router.get('contatos', function(req, res){
var query = {};
if(req.query.nome) query.nome = req.query.nome;
if(req.query.email) query.email = req.query.email;
Contato.find(query, function (err, contato) {
if(err) return res.json({status : 500, error : err});
if(!contato) return res.json({status : 404, error : "Contact not found"});
return res.json(contato);
});
}
更多推荐
req.query的过滤功能
发布评论