如何在请求URL中未传递参数时获取所有结果

时间:2015-10-21 08:59:55

标签: node.js mongodb express mongodb-query

我正在发出请求:http://localhost:3000/getAll?warranty=1&model=M4,它显示保修= 1和型号= M4的所有详细信息,但如果我请求http://localhost:3000/getAll?warranty=1,则表示没有结果。

我的请求路由器位于

之下
class="bottom"

如果查询中未指定任何模型,我想获得所有结果,请帮忙。

1 个答案:

答案 0 :(得分:0)

为了使用.find()进行查询,尝试将查询数据转换为mongoose文档几乎没有意义,因为大多数情况下mongoose会根据定义的模式自动进行类型化。

基本情况是动态地构造查询,而不是编码固定位置:

router.get('/getAll', function(req, res, next) {
   var query = { connectivity:'hdmi1' };
   /*
   // Or if you don't want the hardcoded value with no arguments
   var query = {};
   if ( req.query != 'undefined' )
       query = { connectivity:'hdmi1' };
   */
   for ( k in req.query ) {
       query[k] = req.query[k];
   }

   console.log(query);

   Post.find(query).exec(function(err, posts){
       if(err){ return next(err); }
       res.json(posts);
   });
});

除了硬编码的基本connectivity值之外,其他参数只会添加到发送到服务器的查询中。

投射到你正在做的文件通常不是一个明智的想法。创建的对象上可能存在默认值,这些默认值将导致生成对您真正不想要的值的查询。如果有的话,那么对于具有不存在的值的非存在字段的任何生成的查询应返回"未找到"当posts响应实际为空或null时。

使用req.params而不是req.query作为兼容点,或者如果参数提交方法发生变化,也可能更好。