【问题标题】:how to get all results when no parameter is passed in the request url请求url中不传参数时如何获取所有结果
【发布时间】:2015-10-21 08:59:55
【问题描述】:

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

我的请求路由器在下面

 router.get('/getAll', function(req, res, next) {
 var post = new Post(req.query);
  Post.find({connectivity:'hdmi1',warranty:post.warranty,model:post.model}).exec(f    unction(err, posts){
if(err){ return next(err); }
res.json(posts);
  });
  });

如果查询中没有指定模型,我想获取所有结果,请帮助。

【问题讨论】:

    标签: node.js mongodb express mongodb-query


    【解决方案1】:

    仅仅为了使用.find() 进行查询,尝试将查询数据转换为猫鼬文档没有什么意义,因为无论如何大多数猫鼬都会根据定义的架构自动转换类型。

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

    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作为兼容性点可能更好,或者如果参数提交的方法发生变化。

    【讨论】:

    • 非常感谢,也会检查这个req.params,你也写了console.log,但是日志没有打印在那里,我正在使用chrome。
    • @HimanshuKhandelwal console.log() 的唯一目的是作为示例向您展示如何根据给定的参数构造查询。无论您的日志记录机制如何,最好在调试日志记录级别至少包含类似的内容。
    • 当然..注意。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多