我正在发出请求:http://localhost:3000/getAll?warranty=1&model=M4,它显示保修= 1和型号= M4的所有详细信息,但如果我请求http://localhost:3000/getAll?warranty=1,则表示没有结果。
我的请求路由器位于
之下class="bottom"
如果查询中未指定任何模型,我想获得所有结果,请帮忙。
答案 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
作为兼容点,或者如果参数提交方法发生变化,也可能更好。