我使用Express.JS建立一个GET路由,它接受多个查询,不需要任何查询,我可以通过任何组合来获得不同的结果。
我是这样做的:
router.get("/api", (req, res) => {
let query = {};
if (req.query.paramOne) {
query.paramOne = req.query.paramOne;
}
if (req.query.paramTwo) {
query.paramTwo = req.query.paramTwo;
}
if (req.query.paramThree) {
query.paramThree = req.query.paramThree;
}
if (req.query.paramFour) {
query.paramFour = req.query.paramFour;
}
db.find(query).then(record => {
res.json(record);
});
});
这正是我想要的;我可以通过Mongoose任意数量的查询选项来过滤我的结果。但是,我不禁想到,如果没有四个if语句,有一种更有效的方法。
我尝试过:
db.find({
paramOne: req.query.paramOne,
paramTwo: req.query.paramTwo,
paramThree: req.query.paramThree,
paramFour: req.query.paramFour
}).then(record => {
res.json(record);
})
但这只有在我传入所有四个参数时才有效。
答案 0 :(得分:0)
如果query
上的密钥将{1}}上的密钥映射为1到1,那么您可以迭代req.query
密钥并通过{{3创建req.query
对象}}
query
答案 1 :(得分:0)
这两个答案都有效。基于第二个,我想知道我是否甚至需要创建一个传递给查询的变量。事实证明,我可以做到:
router.get("/api", (req, res) => {
db.find(req.query).then(record => res.json(record));
});
谢谢@peteb和@ rahul-sharma!