Node.js 用于req.query的筛选函数
目前,我有以下几点:Node.js 用于req.query的筛选函数,node.js,mongodb,express,Node.js,Mongodb,Express,目前,我有以下几点: 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
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);
});
}
}
然后在上面我放置的第一个代码中,我只是将mongo数据替换为returnFiltro(“email”,req.query.email)
和
返回过滤器(“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);
});
}
为了简化一下,你可以做一些事情,比如
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);
});
}
棒极了,很好的解决方案我不记得了:D,我能很快问你其他问题吗?我明白了逻辑,这对我来说比代码更重要基本上我想在我的联系人中进行ParcialUpdate,所以我必须这样做/contatos/:id/name,但这个名称可以是3种不同的东西:姓名、电子邮件或电话,我如何检查它以及如何构建路线?很棒的解决方案不记得了:D,我可以快速问你一些其他问题吗?我得到了逻辑,这对我来说比代码更重要基本上我想在我的联系人中进行ParcialUpdate,所以我必须这样做/contatos/:id/name,但是这个名字可以是三个不同的东西:名字、电子邮件或电话、我如何检查它以及我如何构建路线?